Beginner guide for a college programming enthusiast
Tags: programming, beginners, career, intro
Published: 2020-12-27 18:14:48

##Hi Devs,
**In this blog I will cover most of the useful resources for a beginner who just started/starting their journey in the computer science stream**

###Note
**I'm not attaching any resources in this blog because the good skill any software developer can have is the ability to search efficiently for what they need in the tonnes of information available**

> ### Keep in mind
* Never learn two different technologies(Ex: ML & WebDev) 
at the same time, doing so can screw you completely
* Read documentation whenever learning any new technology
* Your graduation stream || age || gender is not at all a barrier
* Maths is not at all a prerequisite for coding, you can become good at logical thinking after a good practice
* No one is always perfect in coding, it's all about practice and consistency that matters in a long run
* You cannot expect yourself to program a production application just after learning programming for a couple of days. (Yes, It takes time)
* Your habits can affect your productivity rate definitely

## Timelines/RoadMap
Let's consider a special character named **Maverick** who has just started his four years of graduation in computer science. Let's have a glance of how **Maverick's** yearly plan should look like if he wants to be a pro developer by the end of his graduation

#First year of graduation
``` 
C and C++ programming languages 
```
> 1. Learn Variable Declarations, Definitions and Scope && Data types && Input/Output && Operators && Control Statements &&  Arrays && Strings && Functions && Pointers && recursion && OOPS concepts, Templates.
2. Try [30-days-of code](https://www.hackerrank.com/domains/tutorials/30-days-of-code) in Hackerrank (It helps in mastering a programming language)
3. Practice problems in Hackerrank || Geeksforgeeks at least for an hour on alternate days which creates a habit of being consistent
4. Concentrate more on C++ pointers && recursion, you will regret if not well versed with pointers && recursion.

```
HTML && CSS
```
> 1. Learn all the basics of HTML and CSS.
2. Design a very basic websites just with a static data (This process creates interest to develop more and more)

```
Developer tools
```
> 1. Learn contributing/publishing your static websites to [Github](http://github.com/)
2. Start using more keyboard shortcuts in the code editors ([VSCode](https://code.visualstudio.com/) is the preferred editor)
3. Start networking with your fellow students || developers and discuss on new trends || technologies. Create || establish a developer groups or student clubs

#Second year of graduation
```
In the second year of your graduation, you will need to start your actual journey of competitive programming, that's where Data Structures and Dynamic Programming come into picture.
```

###First half of second year
```
Java and C++ Standard Template Library
```
> 1. Learn all the basics of Java Programming language, concentrate more on Java Collections, JDBC. In addition to Java Collections, learn C++ STL. C++ STL is a greater library if you want to excel in the world of programming. Compare both Java Collections and C++ STL library with each other.
2. Learn ```Data Structures, Data Structures, Data Structures ``` Start with basics of Data Structures like 1D arrays, 2D arrays, Linked lists, Trees. There will be multiple sub topics in each of the topics mentioned in the previous sentence.
3. Practice more on Data Structures, make sure you become a PRO by the mid of second year in Data Structures.
```
4. Start learning DataBases. Learn SQL and PL-SQL.
[TIP: Use C++ for Data Structures and Dynamic Programming while practicing. Java or Python will be little difficult to use as they do not support pointers]
```

###Second half of second year
> 1. Open your next dimension in to the world of Competitive Programming, Start learning Dynamic Programming. Here comes the actual part of coding journey.
2. Dynamic Programming takes time, but TBH, it's the easier topic in the Programming. But it scares more :)
3. In addition to Dynamic Programming, Start learning Android application development. [This does not mean learning 2 different technologies at the same time].
4. Initially develop basic android apps with Java and XML, Optimise your application with the use of Data Structures and Dynamic Programming patterns. This is how you implement something you learned in the real world.
5. Spend at least 1 hour for Data Structures, 2 hours for Dynamic Programming per day. When you are over whelmed, then develop apps[It will give you more fun]. Make sure you do not loose your grip on Data Structures and Dynamic programming while learning app development.
6. So, by the end of second year. You should be well versed in the Data Structures, Dynamic Programming and have a capability to develop a basic websites with HTML, CSS and JS and basic Android apps with Java and XML.

#Third year of graduation

>3rd year is the most crucial year because, at this point of time where everyone's interests gets diversified and be alone. Figure out your area of interest and use this 1 beautiful year to excel it.

###First half of third year
>1. This is the time where most of the students have mini project || some sort of that.
2. In 3rd year you will also have core subjects like Operating systems or Computer Networks. Learn them perfectly, they matter for placements.
3. Spend proper amount of time in identifying the right audience, right sort of platform(web app/ mobile app) for audience to interact with your application || service.
4. Make sure your interest matches with your mini project. Then try to bring out a working prototype of your idea.
5. If your interest is ML || AI, practice creating more and efficient models and make them as a plugins that can be integrated to any of the web || mobile apps. Your ML models should be able to solve any real world problem.
6. If your interest is application development, explore the world around you and identify the problem which most of the people are facing and create a web or mobile based solution for the same.
7. Create your applications with Frameworks[ReactJS, Angular, Vue, Flutter], because it fastens the development process and achieves re-usability. Explore more type of DataBases and integrate with your application.
8. Never forgot to spend time on Data Structures and Dynamic programming.



###Second half of third year
>1. This is the time where you will be good with almost all the topics you need for a software engineer.
2. Apply for a single solid internship[Try to get intern at 
 FAANG], Do not go behind small small companies unless until it is a good start-up. You did hard work not to settle less.
3. Appear for interviews related to internships, make a note of what has gone wrong in the interviews || your low corners.
4. Spend time to improve the above low corners.



#Fourth year of graduation

>#Depends completely on how you spent the last 3 years


Regards and Good luck, Chaitu Maverick.