Some advice for college freshmen

I don’t know the author but this seems a very good advise for fresh Graduates.

Strong skill of one or more good languages like C++, Java and C#:

Must have strong skills with control structures. Don’t mess up if you’re asked to print out triangle or other shaped piles of ‘x’s with loops.
Must have strong skills with recursion. You must know how to transform a looped task into a recursive one and vice versa, for example: multiplication using addition recursively.
If your language is C/C++, you must know how to play with pointers and references.
Understand pass by value and reference.
Clearly understand scopes and memory allocation, de-allocation. Know when an object is destroyed and when to destroy.
Know the usage of all operators including bit-wise ones.
In-depth knowledge of OOP:
Only being able to write classes and doing encapsulation and inheritance is not what you should call good OOP.
Clearly understand how function overloading, overriding, polymorphism works.
Clearly understand how constructor/destructor (if any) works with inheritance.
Clearly know the difference and use of Interfaces and Abstract classes.
Know how to overload operators. Why and how copy constructor is defined/used.
Know common data structures:
At least know the common data structures like stack, queue, linked list, doubly linked list (know circular version of all of them) and trees.
Be a skilled implementer of any of those, have clear concept of how push, pop, add, delete, peek etc method works on those data structures.
Know most common algorithms well:
You don’t need to memorize pseudo codes line by line but you need to have clear concept of most common algorithms of sorting(bubble, quick, merge, heap, bucket, etc), searching (including DFS, BFS), etc.
As a fresher you must know their time and space complexities, pitfalls and improvements (if any).
General computing concepts:
Know processes and threads, how are they related to each other, how to program them, etc.
Understand TCP/IP: Don’t think it’s only the network administrator’s task to understand TCP/IP. All programmers ever doing any network or web programming should have clear TCP/IP concepts and understanding.
Be skilled in debugging in IDEs:
Be skilled in any of Visual Studio/Visual Studio.Net, Eclipse, Netbeans, KDevelop, etc.
Know how to debug your code.
Have basic knowledge of Software Engineering and SDLC.

General Advise:
Start with C++ or Java, avoid starting with scripting languages:
If you’re learning programming for the first time, avoid starting with scripting or loosely typed languages like: PHP, ASP, Perl, etc or Visual Basic. It may destroy your understanding of program execution, data types, memory allocation, etc.
Start with C++ or Java. If you want to me to be specific, start with C++, you’ll love it for the rest of your life.. 🙂 It’ll be easier for you to learn (almost) any other language (like: C#, PHP, ASP, etc).
If you ask, do you need to know C to start with C++? Or should you learn C first and then C++? C definitely helps a lot for learning C++ but it’s not mandatory to start with C.
If you want to be a good programmer, keep on coding at least 20 hours a week for the next 4 years :). Never stop learning new technologies that are coming out everyday. Know some of the many languages/technologies but be master of one. Know at least one language very well.


About Khuram Ali

Programming... Programming and Programming...!!!

Posted on May 24, 2013, in Programming and tagged , , , , , , , , , , . Bookmark the permalink. 5 Comments.

  1. Totally Appreciated.

    Thank You!

  2. I’d have to agree with this. Java is excellent for learning. It’s free and cross-platform which means you can develop on your Mac, Linux and Windows machines without any source code changes.

    When I work on Projects I use my Mac during the day to code Java and then at night I update my source code and continue work on my Linux home desktop.

    Java is a really good way to learn OOP.

    • Thank you for your comment Jim!
      Java is indeed a great language. Above advise is with an assumption that the primary language is C++. Furthermore, it is more of a question of problem in hand. One should not be language dependent because, in one scenario Java may be the best choice and in another I might opt Python.
      However, I personally weigh C++ more due to following reasons,

      – C++ takes you closer to raw metal. And yes power comes with responsibility.
      – Speed and efficiency.
      – Java virtual machine is a huge factor where speed and efficiency are desired.
      – System programming is also a playground of C++.
      – C++ is the first choice language for Embedded systems , real time systems and mission/safety critical systems.

      As far as, what should be the first language to learn question is, I think it hardly matters, if you are a programmer deep inside your heart. Language is just a tool and during your career, you will learn and use many tools.
      My first language was VB 6 though some people say that, learning basic as your first language, damage your brain permanently… 🙂

  3. I regret not seeing this earlier but am making up for it by relearning C++ deeply, i started with PHP and it messed up my view of programming (“Loose type”) luckily am back to static with (Java/C#) but deep down my mind is always on C++. nice article

    • You can fell in love with C++, no doubt but i also want to emphsize that one should not limit itself to one language. languages are tools and should be used as tools. one tool may fit for one task but not a good choice for others.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: