How to get maximum out of your Computer Science undergraduate period ??
lately there is a discussion going around about the quality of recent Computer Science and IT graduates. I tend to agree all others say about them. Most of the time fresh graduates are self proclaimed experts in many areas like AI/ML / Data Science yet they fail miserably to understand the very basics or perform simple engineering tasks. So the question comes .. Why ???
Answer is simple and let me describe in one picture.
Yes this is real. And I am not the only one feel this way. Have a look what Hasitha has to say. he got more experience than me and held top positions in top software companies in the country
Cargo cult programming is killing the (Sri Lankan) software industry
Some months ago, I asked a self-identified "machine learning expert" to explain backpropagation to me. They could not.
So how you can avoid this pitfall ?? following is the my idea of how an undergraduate should tackle his degree program and what to focus on each stage . First steps should start even before one should decide to pursue a career in Computer science.
Don't Choose Computer Science or IT :
- Just because You have played number of computer games and spent entire childhood in front of a computer
- Because you can earn high salaries
- Because it's the easiest and widely available degree program in universities
- Because you have good GPA ( only applies for certain universities )
Don't get fooled by what general public has to say. Software or Computer related jobs are not the only high paying ones in the market. Even if you get high salaries, the price you pay is also high in terms of stress and effort required. Also its a highly competitive job market and all the success stories you may hear and only 1% of what’s out there. So choose only if you are ready for it and best way to have an understanding is to ask around few people who can give honest opinion about it.
Before even starting your Degree
There are many paths you can take after completing a Computer Science or IT Degree. Yet regardless of what path you will take following things will become handy. So do your homework and learn these
- Mastering an Operating system
- Learning to typeset documents , create presentations and use spreadsheets ( i.e Microsoft office )
- Learning about basic computer hardware
- Strat programming ( learning one language )
basically these things will more or less determine who will come on top once you graduate. If you can get head start with these and will guaranteed to be a star among your batchmates.
First and Second Year — forget about the buzzwords and focus on basics !!!!
This is where most people get it wrong. Yes, learning fundamentals are boring. And as an undergraduate you may not understand the importance of it. But believe me this is the stage which will ultimately determine whether you will become a super star or a just another “Developer” in the future.
Specific technologies come and go time to time. What's hot today will be obsolete in few years but core fundamentals of Computer Science will remain relevant.
So what are these fundamentals ?? mainly I can think of following areas. but list is not a formal one and I may have missed few
- Data Structures and Algorithms
- Mathematics , Statistics and Optimization
- Computer Architecture ( hardware ) fundamentals
- Networking Fundamentals
- Operating System Fundamentals
- Human computer Interaction Fundamentals
- Programming Fundamentals ,Concepts and Software Architecture
Simply anything considered “hot” nowadays are built around theses core fundamentals. Let me get an example. Most self claimed machine learning experts ( fresh graduates ) know about tensorflow and get something build around libraries. But that adhoc knowledge will only get them that far. In real world you will need to optimize the models. To optimize them , you need to have a good understanding of statistics and mathematics around it. Also when you want to build an application using a ML model which need to be used by thousands of people , you will need to have a good understanding about the underlying networks , computer hardware and most importantly should have skills to write actual code.
Chasing glory at early stage of your degree forgetting about learning core fundamentals will only get you to a very short journey in the future.
Its like a soda bubble. knowing tensorflow at first year may win you a hackathon or two but if you do it at the expense of understanding or focusing on fundamentals , those one or two hackathon wins will be only achievements in your entire life.
Have a look at what are the questions asked by Top software engineering companies at their Job interviews. Believe me , if you don't know the fundamentals, then you will not even have a chance to go through first two questions.
So it's important to keep your head down and focus on the fundamentals at this stage. Because you will not get a second chance to cover these later on.
Master one programming language then learn another
That guy can code in 10 languages !!!
seems cool right ??? 9/10 times I hear this , the guy ends up just a person who knows how to write hello world.
Regardless of whether you will go to industry , join academia or start something on your own , it's important for you to know at least one programming language in depth. So pick one of popular and traditional languages and start mastering it in this early stages. As an interviewer , a candidate knows one language to the depth impresses me than a guy who know little bit of everything .
Later on in your final years or during internship make sure you learn another language. it's important to learn the art of transferring your skills in one language into another. So when you try this you will realize it's actually easier than you think. !!!
Don't start specializing before you get the bigger picture.
Don't be the guy who buy the first item you see in a store without exploring what store has to offer. Don't start specializing at early stage just because an area you just learned seems interesting. Starting an specialization during an undergraduate degree is a very dangerous thing. So I advise you to keep an open mind at least until you start your final year and/or research project.
Seek Guidance and Mentorship but from correct people
Having a good mentor will help you to learn things and see the bigger picture. But you need to be careful with whom you seek mentorship from and also need to make sure you keep an open mind about it.
Get the maximum out of your internship
Internship is a key component of your undergraduate program. So make sure you pick a good company and get the maximum out of it. Key factor is to pick a company who got good people who are willing to teach you. Internship is not a job . it's a learning experience.
Personally I prefer everybody following an internship in a traditional enterprise development environment regardless of what your future ambitions are. Having exposure to the real enterprise development will give you valuable insights on best engineering practices.
Hackathons , Competitions and freelancing are cool. But don't do it at expense of other important things
All the flashy awards , bragging rights and some money in the pocket can feel so rewarding. Also these can easily distract you from reality and ultimately causing you to lose the sight of the bigger picture. So pick the worthy competitions to participate and things to do in your spare time. Nobody can have it all so pick what's best for you and stick to it.
Communication and Soft Skills are important !!
Being able to communicate properly and work with people effectively will be a major deciding factor in your Careers so focusing to improve them is important. But again as with other things don't get too hung up with them at expense of fundamentals . Ultimately Industry need “Engineers who can communicate” not “Nice communicators who knows some engineering” .
Also Engineering communication is all about being clear and concise.
Finally , Start exploring “Hot” Technologies and what's out there in your final years
In the start of the article i said avoid these…. Don't get me wrong what i said was to avoid focusing on these at early stage. There is nothing wrong on focusing on these when you have laid a solid foundation. Infact having an idea about current trends and some exposure to those technologies will help you to stand out from the crowd when you seek your first Job.
Having professional certifications is good. But I would not focus too much on these and also I don't expect fresh graduates to have certifications. Simply the idea of a professional certification is to have knowledge and the experience even if a fresh graduate pass the certification exam that does not mean he or she will have the relevant experience .
Learning does not stop at graduation . It's a lifelong thing !!
Yes. In this field technology evolves everyday and you will be embarking a lifelong journey of learning. The day you stop learning new things will be the day you start becoming a dinosaur.