Category Archives: CSE Overviews

We Must Do Something

Due to the events happening in America in recent days, I felt it’s important, first as a person who had to learn that I was black 4 years ago when I moved to America for college, second a person who walked the halls of Davis as a CS student and had the opportunity to be the author of “Engineer’s Lounge blog” – an educational resource for CSE students, that I write to you about the need to take action and be a part of the solution to the current problems we are witnessing.

State-sanctioned violence through police brutality and institutional racism against black Americans is not new. What troubles me more is even as I write this, I’m aware of my non-black acquaintances that rebuttal my assertion by saying, “But slavery ended over 100 years ago. The constitution gives rights to every American, why do black people complain they have no rights? ” These responses arouse a mild fit of irritation because the reality of black people is often trivialized and their experiences are dismissed by non-black people because from where they stand, they aren’t spectators to the injustice black Americans endure. This is wrong and it must stop. To refuse to educate yourself about the reality of black Americans is to remain complacent with a system of oppression. 

What’s happening in Minneapolis, Louisiana, and across different cities in America is an explosion. Others say black people are perpetrators because they use violence to demonstrate and destroy their own communities. To exist in a country and witness the continuous mistreatment of black Americans by the police for decades and then not expect black people to explode into violence is lunacy. It is dehumanizing to pass judgment on a person for their reaction to a system that murders their brother, father, friend in cold blood as the world bore witness in the case of George Floyd. No one wakes up in the morning to be violent, loot a city, and then burn it down. To think anyone in their right mind would is to refuse to see black Americans as you see yourself. Would you wake up and loot a town without any provocation? Americans, black Americans are mourning.

I agree it’s important for Americans to preserve their infrastructure. But it’s just as important to understand, why are Americans demonstrating today? Why did Malcolm X preach on April 27th, 1962 at Muhammad’s mosque no.27? Why did Dr. Martin Luther King march from Selma to Montgomery? Why did the black panther movement come into existence? Why did Sandra Bland, Eric Garner, Tamir Rice, George Floyd die the way they did? Why did we have the 2015 Baltimore riots? Why have black people been begging for equal human rights for more than 100 years in this country? Is that normal? That black fathers and mothers die while asking to be treated as human beings only for their children to be lynched and slain in broad daylight in the streets. 

So I’m here today as someone who was once your classmate, your student, your groupmate, your friend. I’m here to say that the plight of black people in America is dire and the expense of our silence is far too high a price to pay. We can’t afford that. Today, black Americans need us. Do more than say, “I understand your pain”. Show that you are in the fight with them. Give to causes fighting for justice for black people. Give your money, give your time, give your knowledge. You are computer scientists. You are engineers. You are human beings. You can do something about this – so you must. 

As computer scientists and engineers, the impact of your work has the power to change the world today. The algorithms you write have the ability to create technology that will define the standard of life for generations to come. With that power comes great responsibility. It is impossible to write unbiased algorithms if you don’t educate yourself about the unconscious biases you may carry as a result of being a part of a system that marginalizes black people in America. This is why you must educate yourself about the history of this country. You must be conscious of your own participation in the system. And you must answer this question for yourself, are your actions actively contributing towards the progress of this nation to promote equal rights for all? 

I’ll leave you with this quote:

“The pursuit of full humanity, however, cannot be carried out in isolation or individualism, but only in fellowship and solidarity;”

Paulo Freire, Pedagogy of the Oppressed

Places To Find Projects.

There’s not enough time in your classroom lessons to learn everything you need to know about your programs and that’s why personal projects are important. They help build your skills and give you a deeper understanding of the class material. Most importantly, they also make you more competitive in the application pool for jobs and internships. Think about it from an employer’s perspective: A person who has any experience outside of their classwork activities shows that they are driven and they are willing to use their personal time to improve their skills. It also shows you know how to learn independently and these are all these are attractive qualities to have as a candidate for a job.

In general, personal projects are a great place to learn new technology and software that other companies use especially if there is a specific company you absolutely would love to work for. Look into the technology/frameworks that they use for development and use your personal projects to develop those skills. For example: if you are a freshman and want to get an internship with a big N company, look at their job descriptions for positions they have open for internships and start doing things that help you accumulate the experience they need you to have. 

Below are a couple of resources that are great for finding projects to work on in case you are struggling to find some. 

  • Some of your professors have projects that they work on continually and are willing to work with undergraduate students. Reach out to them to find out if you are able to participate in these projects.
  • UB Email Inbox 
    • I know you hate opening the mass emails that flood your inbox daily but there are PLENTY of opportunities for projects and internships that come through. It might be in your best interest to start reading them.
  • Your own head. Those ideas you think about then after 2 days discount, maybe you should try working on them and even if they don’t become the greatest developments, they will be a great way for you to improve your skills.  

I will keep adding to this list of resources when I come across other opportunities so be sure to check back here occasionally. Also, feel free to reach out at nekesame@buffalo.edu if you know of resources for projects that I could share with others. Enjoy your week!

You need to work on Personal Projects

People:

Me: You can get experience without a job. Personal Projects are the way!

We are in week 3 of the semester and I hope I can still say welcome back! This semester, I am going to focus on one single theme: PROJECTS. I can’t say enough how important it is for people to work on personal projects as Engineering and Computer Science majors. So through the course of the term, I will explore different aspects of why it is important to be involved in projects and how you can go about the process in case you don’t know where to start. Today, I’ll start with the basics of why you should even care:

Freshmen:

This is the best time to start. Many companies want to hire student interns that show initiative and have at least some background and experience in the field. As a freshman, take this opportunity to find projects to work on in your field of interest. This will become so valuable when you start looking for internships next year – if you aren’t already on the search since you will have work experience to add to your resume in addition to course work material. 

Sophomores:

You might have applied to internships before, received many rejections and aren’t sure why this happens or what you can do differently improve your chances. While it’s hard to pin down an exact reason as to why you got rejected, one sure way to not get any callbacks is if you lack any kind of experience outside of classwork material. This is where getting involved in doing personal projects is of tremendous benefit. It will help you boost your resume, improve your programming skills and most importantly show a prospective employer that you are a driven student – which is a good trait to have.

Juniors

  1. First, if you have never had an internship until this point, it’s not too late. Start urgently looking for projects to get involved with and if possible, look for unpaid internships in case you aren’t getting paid positions. (There are qualms about the idea of unpaid work, I know, but the reality is having unpaid work is better than no work experience at all.) Unpaid internships show that you have work experience and in most cases, they are so flexible with the work schedule and can be done remotely. So I’d say, take the chance. In addition, work on personal projects while doing unpaid internships that are in your field of interest. In the end, you have work experience from a job and personal projects to add to your resume.
  2. For those that had internships before, don’t be too comfortable. Most people you are competing with during the application process already have had an internship too. What will make you stand out? Projects. If you have work experience from internships and can also show that you have other projects you work on individually, many employers would be willing to take you over candidates with only internship experience. So make yourself stand out more!

Seniors:

If you have never had an internship and never done personal projects – first of all, I’m sorry this is you – BUT there is hope for you too! Working on projects will equip you with the skills that you need in your job interviews and at your job. So get on it now. In case you don’t have a job lined up after graduation, you can keep working on these projects and the longer you do (even after graduation), the more skills you will gain and that will make you more appealing to employers as you continue to search for work.

In conclusion, I’ve made it sound like you need projects so you can get hired – honestly, you do. Since you are in college making this huge investment, it’s only right that you are able to get a job when you graduate. Most importantly, projects will make your learning experience a lot more enjoyable as you will get see the application side of the theory you learn in class. This week, for those that have ideas for projects but don’t know how to turn that into a project that you can work on with other people – or by yourself, in case you prefer that – please email me at nekesame@buffalo.edu . I’d love to help point you to resources/people that can help you get started.

For those without any idea for a project but are still interested in working on one, next week, I’m going to post resources that you can use to get project ideas to work on.

I look forward to hearing from you and enjoy the rest of your week!

Both Sides Of Impostor Syndrome – by Jared Lockhart

Imposter syndrome doesn’t discriminate and it happens to a lot of people around us, perhaps, it’s happened even to you. Today, it’s not only good but also important that mental health is now becoming the main part of the conversations that we have about our lively hood and there are a lot of resources that are becoming available so people have better ways of coping. Being in a rigorous field like Computer Science or Engineering can take its toll and a lot of people struggle with imposter syndrome along the way. I’ve found that sharing our experiences about the struggles we go through as CSE and CE students is not only helpful to us(the people sharing), but also helpful to others (the recipients of the story) as it allows us to learn from each other or simply bask in the understanding that you are not alone in this struggle and it is okay for you not to know everything and its also okay for you to seek help when you need to. What matters is that we all make it through and journey together in a healthy way, both physically and mentally. This week, one of the students in the CSE program wrote an article about his experience with Imposter Syndrome that is not only educational but also inspiring. I hope you enjoy reading it as much as I did! Remember, if you have any ideas you want to share or any kind of feedback, please email me at nekesame@buffalo.edu. Enjoy the rest of your week!

Both Sides of Imposter Syndrome by Jared Lockhart

I built my first computer when I was nine. My parents then believed they had the next Bill Gates on their hands. My mother would say, “There is no need for a computer science degree if you can build a computer before puberty.  The world is yours, my son, you can have it all.” My mother didn’t actually say those words out loud to me but I knew that’s what she felt in the quietness of her heart because of how much faith she had in my capabilities as her only child. From the first moment I went to school, I had excelled at whatever I set out to do. Grades came easy. Winning local videogame tournaments came easy. Computers came easy.  My mom always said I was the best-looking boy at school too! I never knew what it felt like to try hard at something because I was a renowned neighborhood genius. My mother’s genius. Always understood things on the first try.

My formal introduction to programming was sophomore year at Vanderbilt University, an intro programming class in Java. Grasping the concepts was difficult and for the first time, I struggled. I made a C in that class and despite the fact that I was heartbroken, I had enjoyed the class. I found the challenges fun so I decided to take the second semester course, focusing on C++. Pointers destroyed me. The assignments were well above my head and I ended up with a D in the course. My mother wasn’t going to watch me fail out of a school. Because I had never struggled at anything, I never knew how to deal with things that didn’t come to me naturally. I never knew how to do things that required more of my attention and hard work. These hindrances, coupled with my fear of failure gave birth to a situation I call “This is not for me right now”. Which loosely translated to, I quit. I loved computer science but decided to focus on my Psychology courses. I didn’t struggle in Psychology so it made sense to major in it and even though it wasn’t challenging, I still enjoyed it. It wasn’t quite the same though. In my short life I’ve learned that failure is not the biggest obstacle to success. Fear of failure is the biggest hindrance to success. 

I graduated from Vanderbilt in 2010. I was accepted into a master’s program at Marshall University. I did my masters in Clinical Psychology and was not challenged at all. For example, every graduate student had to pass a comprehensive exam to graduate. This exam was not reserved for students poised to graduate so anyone in the program could take it any time. In my first year, the first semester, I tried this exam on a whim. I wanted to use it as a practice run that would help me prepare for it in the future when I had to take it before graduation. Lo and behold I passed the exam on the first attempt.  One of my professors took interest in my assessment capabilities and I ended up working with him in his forensic psychology firm for my internship. Things were looking good here.  

I graduated a year early in my Master’s program and took up several jobs that kept going nowhere. For reasons above my control, those jobs never lasted. Ironically, I excelled at the work I did in these jobs. But just because you are good at what you do doesn’t mean you are immune to losing that job. The thing about practicing Psychology was that I felt something was missing. I was good at it but didn’t find it fulfilling enough. I told myself I was good at this, and since I feared failing at something else I settled. I quickly burned out. I don’t think doing Psychology is an unsuccessful career. I lost my passion for the field and didn’t enjoy what I did. So it started to take a toll on my well-being. 

After losing my fifth job, I knew something had to change. Five failed jobs for absolutely no reason in your control will do that to you. I was good great at Psychology (or so I was told,) but I remained unsuccessful. I was dissatisfied, depressed, broke and ready to redirect. It took five failures in something I was good at to redirect me to something I am passionate about. Talk about being big-headed.

I didn’t think I was going to excel in computer science but this time I didn’t care because I at least knew, I enjoyed it. In fact, I thought not succeeding at something I enjoyed was a failure anymore. I looked at it as an opportunity to learn something better than I had before. In 2018, I enrolled at UB to start a BS in Computer Science. I got in on the stipulation that I had one chance to make it into the major.  Remember my D in the second semester course? I would have to retake this course. On my own I had to reteach myself everything taught in the Java course to catch up in my current courses at UB. It felt more and more hopeless as I failed or scraped by the lab exams every week. Discrete Structures was also terrifying. The midterm was disastrous. Depression and anxiety were at an all-time high. I was going to lose my chance to do something I was enjoying. With my background in psych, I knew I was spiraling and sought counseling. I stabilized just enough to keep working throughout the semester. My grades started to improve in the second half of the semester. But the looming threat of making a C in my courses and not meeting the cutoff still loomed. I poured through my texts, and annoyed my friends in the field for extra explanations of concepts. I went to TA’s for more help and worked long hours into the night to finish assignments on time. Surprisingly, I managed a B+ in the second intro course, and an A- in discrete structures. Hope.

My second semester was no easier. I had an unrealistic expectation to make all A’s in every class. Despite starting considerably behind my peers, I wanted to exceed at what I did. This kept me stressed, anxious, and depressed. These would be issues I continued to work on with my counselor. As a result, I made major gains in both my ability to function in the program and my current mental state. Support from other students, professors, friends, and family kept me going. I never took breaks and stressed endlessly throughout the semester. It was not the healthiest choice, but I achieved my goals. 

So here we are, I’m in the middle of a career change, struggling with nearly everything that is thrown at me. One part of me loves the challenge and finally getting to do what I ran away from in my early college years. The other part seeks safety in what I know I’m good at despite never breaking through to higher ranks in that career. And that’s okay, I’m only human. We all want to do what’s comfortable. I’ve learned the hard way though. If your “comfortable field” is not what you enjoy rethink things. In the long run, it could take a toll on your mental health and overall wellbeing. Whatever you do, don’t let the fear of failure in something you love to be the reason you settle for something else. Despite the struggling and the hard work, I enjoy what I get to do now in Computer Science. I still don’t have it all figured out, but all I know is that so far, I’ve found this all much more fulfilling than my time in the field I settled for.

Helpful Websites

A lot of useful websites are available for college students. This post will focus on useful websites for CSE students in particular.

  • Google scholar: A part of google that specializes in research papers, it’s very useful if you’re doing research or if you want a more direct line to credible scientific sources.
  • Online code validators: Simply put, there websites that check if your code is structured correctly. I personally have never gotten much use out of validators that check the more common coding languages (like Java or Python), however, have found that they are useful for more obscure languages like Regex, or file types like YAML, or JSON (which deserve a post of their own):
  • Code training sites: These sites are useful to help get better at programming through practice. I’ve found them to be most useful when studying for CSE exams for classes with limited homework.
  • Stack Overflow: This site works sort of like yahoo answers, but specializes in electronics, computers, and programming. It is extremely useful when you’re stuck on a programming assignment.
  • WolframAlpha: A site that allows you to do complex math (such as derivation and integration). It is useful for checking math answers, but be careful not to let it do your homework for you. Another good and credible online calculator includes Desmos. If Desmos and WolframAlpha fails (which is very rare), there are many great alternatives such as fxSolver, Symbolab, Cymath, and Mathway.
  • Autolab: A service that the CSE department uses to automatically check and score your programming assignments (was created and is maintained by UBCSE and only useful if professor uses it in his/her class)
  • Piazza: A forum for classes that allows you to contact your professors, TAs or fellow classmates about questions relating to the course (only useful if professor uses it in his/her class). If you want to personally communicate with people in your class, try softwares such as Slack.
  • Utility services: Websites such as WhatIsMyIP allows you to check your IP. SpeedTest allows you to test your internet connection speed.
  • GitHub: This website allows you to share, contribute, and download coding projects. Think of it as a GoogleDoc for programmers. It’s considered an industry standard tool and you will almost definitely use it for group based coding projects at the university.
  • GeeksForGeeks: This website is especially useful for understanding important coding basics and abstract data types. It is also another great source to practice typical programming interview questions.
  • Notepad++: A simple text editor with code parsing functionality.
  • LibreOffice: An open source office suite software, similar to Microsoft Office. Alternatively, if you prefer MS, students can download Office 2016 for free.
  • VLC: A cross-platform media player that supports many video file formats. I have found this a better alternative to preinstalled video players, such as iMovie or Windows Media Player due to the quality in sound and video.
  • GIMP: An open source free image editor. Another alternative website includes Paint.NET. Draw.io is similar, as it is a free online app for flowcharts, and diagrams.
  • Audacity: An audio software for editing and recording audio files that supports multi-tracks.
  • Malwarebytes: Free malware and virus removal software. Keep your computer safe and protected and run this software frequently to avoid unnecessary stress!
  • qBittorrent: A BitTorrent client useful for downloading or transfering large files via the internet.
  • Universal USB Installer: Allows creation of bootable drives, Alternatively, Rufus does the same thing.
  • Display Driver Uninstaller: Useful for when updating video drivers/migrating to new card.
  • Wireshark: An open source packet analyzer. It is also a fun website to play around with in order to better understand networking concepts.
  • Postman: A website that serves as a HTTP API tester.

 

  • Websites to Organize your Computer: Lastly, with all these websites, along with the other documents and files on your computer, you’ll want to keep all this clean and organized. Check out these websites and softwares if you’re running low on storage or want to tidy up your computer.

 

    • CCleaner: Removed temp and junk files from computer.
    • KeePass: Open source password manager
    • Zotero: Cite and source manager

Helpful computer programs

Since you will be working with computers  from here on out, here are some programs we would recommend downloading:

  • Eclipse: If you plan on coding in Java, it’s best to download Eclipse. It’s currently the most popular Java IDE(integrated development environment) which means the program is designed like a work space for your code. Depending on what language you want to code in and how you wish to do so, you can modify eclipse with plugins, integrations and SDKs(software development tools) that allow you to do all of you development under one umbrella. (https://www.eclipse.org/downloads/)
  • Pycharm: If coding in Python, download Pycharm, It’s an IDE made by the same people that made the Python language. There are other IDEs out there for Python (or example Anaconda and IDLE) as well, so feel free to check them out. Pycharm has two versions- the community version, which is the basic version and is free and the professional version, which cost money but gives you extra tools/perks, HOWEVER, there is a free student licence that you are qualified for, which will allow you to get the professional version for free so be sure to take advantage of it (https://www.jetbrains.com/student/).
  • Putty: If your using a Windows machine, then your going to need to download Putty. Window by default does not have the ability to SSH(windows 10 does but its in beta) into other computers (SSH deserves a post of its own, but in essence it means connecting to the command line of another computer remotely) and you will need the ability to do so. (https://www.putty.org/).
  • Remina: While you can’t SSH in Windows without installing a program, its remote desktop (allows you to remotely access a computer’s UI, usually best for remotely operating windows machines) is terrific. The converse is true for Linux, you can SSH very easily, but their remote desktop program is not great. Therefore if your using Linux, downloading Remina (or another of the various remote desktop tools for Linux) is recommended. (https://remmina.org/how-to-install-remmina/)
  • Virtual Box: Basically this program allows you to have a computer running inside your computer. It’s useful if you have a Windows machine but want to run a Linux machine for certain homework sets or want to get used to the operating system.(https://www.virtualbox.org/)
  • Atom: Essentially, atom is much like Microsoft Word in that it allows you to edit files but Atom allows you to modify any file regardless of the extension(word only modifies .doc files and its variants(https://en.wikipedia.org/wiki/List_of_Microsoft_Office_filename_extensions). Just note that certain file are only meant to be read by the computer and therefore can be opened but are absolute gibberish. I will recommend Atom because that is what I use the most but there are others like sublime text and vim (https://atom.io/).
  • Git bash: Git is best explained as a Google Doc like service for programming projects (and it will need its own post). Git bash allows you to use git commands so you can upload/download your project to and from git. Git is considered industry standard so you will need to at least know its basics.(https://git-scm.com/downloads)
  • AnyConnect secure mobility client: this is a VPN(stands for virtual private network) that you can download from the university. This is useful if you need to connect on campus for submitting homework assignments, but are off campus. (http://www.buffalo.edu/ubit/service-guides/software/downloading/windows-software/managing-your-software/anyconnect.html).
  • LaTex: LaTex is best described as the enhanced version of MS Word. LaTex is a great alternative for writing research reports and math documents. It is also entirely free and is supported by any operating system. The only downfall is that LaTex has a slight learning curve, since it requires some knowledge in the syntax and language it uses. However, if you are familiar with markup languages, such as HTML, then you should be able to learn it in no time. Using LaTex makes writing your documents more efficient and elegant.

 

There are also a ton of free programs available for download from the university at this link: (http://www.buffalo.edu/ubit/service-guides/software/downloading/windows-software.html). Many of them do require a license but since the university bought the licence en mass it does not cost you anything to download and use.

Linux vs macOS and windows

If you’re reading this post on a computer, chances are you can spot one of these two symbols somewhere on the screen. Either a variant of this: or a variant of this:. These are the symbols for Microsoft Windows and Mac OS, the name of the operating system running on your computer.In a nutshell, operating systems serves as a platform for separate programs to run, which means all computers must have an operating system in order to be functional. The two above are the most common, mostly because they are extremely user friendly and are backed by very large companies. However there are many others, the most well known being the Linux family of operating systems(). There exists many Linux operating systems each serving different functions. You will definitely see a Linux operating system at some point during your time as a CSE major. Due to Linux’s massive customization potential there can be many, many differences between Linux and the other two major operating systems but here are some of the biggest.

 

  • It’s free: Windows and Mac operating systems must be purchased, but most Linux systems are open source; the code is available for everyone to use, modify and improve at no cost.
  • More developer friendly: Far greater customization and less restrictions allow for a better more suitable programming environment than Windows and Mac. This comes at a cost of user friendliness.
  • Better command line:(i.e.:) Better native command line, has far more uses and allows for the creation of more complex scripts.
  • Bigger learning curve: Most tasks involve using the command line more and leaves less to the UI.
  • Lower market share: Less popularity means that some programs available for Mac OS or Windows may not be available for Linux.

 

This post serves mostly as an introduction to Linux. If you’re interested in trying Linux out for yourself, Linux Mint (https://linuxmint.com/) or Linux Ubuntu (https://www.ubuntu.com/) are a good place to start.