Ask HN: What a 2nd tier college student must do to be at par with the best?

92 points by amandavinci ↗ HN
I'm a student of VIT University, India. Everyone in our country, from academia to industry, looks at us as second class undergrads.

I'm passionate about solving problems and making things, especially AI and game development. But due to some bad decisions I ended up dropping two years after high school and could not get into the IITs i.e. the top colleges in India. Ever since I started college and found the sub-par level of CS education here, I have tried to take my education into my own hands. I'm an autodidact by choice and here is the strategy that I have followed for the past one and half years at college:

- MOOC : I have studied all the important CS courses from popular MOOCs like CS50, MIT OCW, etc. I have earned a certification in an AI MOOC taught by the IITs and completed the Machine Learning course from Coursera too.

- Projects : I have done some good projects and open sourced them at https://github.com/AmanDaVinci

- Others : I have worked as a two man team to publish a game on Play Store and we also sell our plugins, tools and assets on Unity3D asset store. I have organized and instructed successful game development workshops as I plan to start a Game Dev club in our college.

Considering the experience and expertise of the HN crowd in the engineering field, what more could I do to be at par with the top students of the world?

1) Should I invest in AI / ML nano degree certificates?

2) Should I work more on real software projects like open source AI and games?

3) Can I do anything else to improve myself?

69 comments

[ 655 ms ] story [ 2009 ms ] thread
At the risk of sounding cliche', just do work at something you enjoy. If you think there will be valuable knowledge in the degree certificates, go for them. If you have a cool idea you want to explore, go for it.
Yeah exactly but I always feel like I'm short of time. Like just a few years more and I'll have to look for a job. Mandatory attendance at boring classes doesn't help much too.
You seem like you are really on top of your game though. I'm impressed. It's sad to see so much weight on brand name schools.
If the classes are boring, it's either because you aren't close to the level of knowledge you should be, or else you're far ahead of the curve. Given what you wrote about your education so far, of course the latter is true.

I envy you actually; I never had a head for higher math and programming, my talents lie in hardware hacking and electronics repair. I'd love to learn some proper CS, but my life took a different track before college and now when I try to learn anything beyond bash scripting or simple microcontroller stuff in C, my mind turns to mush.

Focus on learning and self improvement. Everything else will naturally fall into place.
Code that solves a real problem or runs a real (viable) business is more important than any degree certificate you will ever get. 93% top most successful corporations in America are managed by people who come from 2nd and 3rd tier grads. Steve Jobs was a college dropout.
No one you want to work for is going to look down on you based on where you went to school.

I hesitate to give you advice since it sounds to me like you're pretty busy already.

First, you need to think about what you want to do after graduation, such as becoming an Android game developer or a graduate student focusing on AI. Then figure out what you need to do to achieve your goals (such as work on projects or do research) and keep working on it. Everything will be fine and you can be at par with the best.
Most of my undergrad friends are really torn between academia and industry. And since I'm in my sophomore year, I feel it's too early to make the right call. Anyways, I do need to decide sooner or later.
I don't know what it's like there, but I would get involved in research with a professor if possible. Doing so had a really positive impact on my undergrad experience, and will inform if you want to stay in academia or not.
College is a good place to try things out before diving into them. But I have found no passionate profs in my college and getting a research internship under a good prof is a task in itself.
Do you want to be a game developer or an AI expert? I would suspect that the things you should do are going to be quite different.

Also, what do you mean by "at par"? Status? Money? Knowledge? Expertise in a given area, and if so, what?

Though I have an interest in games and AI / ML, I would still consider being a good software engineer first. I'm aiming for a strong foundation and expertise in one field: AI or anything related. Being a fresher, I believe I won't get to work straight at these.

And by "at par", I meant the same opportunities that a top school student gets.

My opinionated version is that you should bail out on games and focus on AI/ML, then try to get into the best grad school you can and get really good at difficult things that other people can't do (even better, things that they can't do and don't want to do). Games fail that test because too many people want to work on them.

Becoming a good software engineer seems to come from working with people with good taste (on real projects). In my experience I haven't met anyone who learned to be a good SE from university (it may be possible, but I doubt it would happen at a mediocre university).

Indeed. After talking to other people and thinking hard about my options, I have come to same conclusion. But finding good people to work with or under seems really hard. I really don't know how to find good mentors other than contributing to open source and hoping someone senior likes my contributions.
OK, so I'm writing in a 'dead thread' (likely) but for what it's worth: I think your last sentence is the right idea; do the work then find a mentor in a related area as a consequence of that. I really don't like being approached by people who haven't put in any effort yet want to network for the sake of networking.
You have already mentioned the top one for me: passion.

Colleges rarely teach you what you need to know professionally - they can't, tech moves too fast. Instead, they teach you how to learn what you need to know. This is an important distinction because it should inform your approach to your professional growth.

1. Stay passionate both about software and your own growth/education in it.

2. Start some personal projects and, important, work on them until they reach a place where you can talk about what you learned, the techs you used and be able to at least show a page or two of it working.

3. Be forthcoming in interviews about your desire to create. The longer i am in software the more importance i put on hiring creative people.

Finally, think of software development as modern day blacksmithing. Those who do well have a few things in common: passion, persistence and a great set of artisans (mentors) to learn under. Prioritize finding some people who have compelling opinions on software development and work with them. It will change how you build software and the value you will bring to teams in the future.

I'm following the first two points earnestly and I'll start with the third one as well.

And the mentor aspect is what I'm missing right now. So, I have planned to contribute to open source and/or apply to GSOC '17.

Any other ideas how to find suitable mentors?

You are well on your way. The fact that you are posing the question already speaks highly of your drive, so hold your head high.

I'm sure others will have better advice than i do about finding mentors. In my case my first CTO out of school was a major impact. I should also say that mentors may not be above you, but peers. Even in college i became close friends with other developers who, collectively, influenced one another with our learnings and opinions. A rising tide raises all ships, as it were.

It's worth putting your contact details on your HN about page
"Colleges rarely teach you what you need to know professionally - they can't, tech moves too fast. Instead, they teach you how to learn what you need to know. This is an important distinction because it should inform your approach to your professional growth."

That's B.S. that lazy college professors use who have their heads so stuck in academia that they don't take the time to keep up with technology. Technology stacks don't change that fast in the enterprise that they couldn't do a better job of preparing students and teaching them how to hit the ground running at a company.

During the beginning of 2013, for standard enterprise development, Java and .Net along with Bootstrap and Jquery were popular - they still are used today.

Back in 2013, the databases that were used in the enterprise are still popular today. iPhone and Android were the most popular mobile platforms.

Sure keeping up with the latest front end framework may not be easy to teach, but courses in JavaScript, CSS, etc would still be enough.

There is no "best," but you mention AI in two of your three questions, which I think answers the third.
(comment deleted)
Possibly unpopular opinion here on HN. I almost went to VIT in 2007 (shockingly got into NIT Trichy instead).

1. Focus on becoming a good programmer (ie, SPOJ/Topcoder/Directi). That'll help you clear interviews, and get good at thinking about algos and data structures. I'd even prioritize this over other CS fundamentals.

2. Keep your GPA up and get into a good grad school. I disliked both the interview process and the classism (ie, recruit from top schools) of Indian companies when I interviewed there.

3. If you don't want to go to grad school, make sure you don't touch TCS/CTS/Wipro/<insert mass VIT employer here> with a 100-foot-long- pole. Given your passion, and assuming you use the next two years to become a strong programmer, you will find a good place to work in Bangalore. You might have to pay your dues, but please don't pay them at the above mentioned places.

And people who look at you as second class undergrads can fuck off (esp the professors at IIT Madras :) ). I know several friends at IITs that preferred to pot-smoke-away their time there. If you're near Chennai I'm happy to chat with you.

I work at a Fortune 50 in the US, and we hire a lot the TCS devs and others from Chennai. A lot of them whom I talk to say they feel trapped where they are, and exploited by these mass VIT employers.
Being a good programmer and having a good GPA seems like inversely proportional in our college. Only the students who follow lecture slides and are good at writing exams seem to have >=9 CGPA.

And yeah, it would be great to chat. Here is my mail: aman@amandavinci.me Or, you can go to my website for social media contacts: http://amandavinci.me/

Yes, I know that. I'm asking you to keep your GPA up inspite of that :-)
I understand the issue of balancing classes and doing projects. If you want to go to grad school GPA will matter a LOT more. Keep it above 8 even at the cost of spending less time on your skills.

If you are sure you do not want to go to grad school (which is very difficult to decide at this point) focus more on projects. Try to get an internship at a good startup and prepare for interviews hard (read DSA). Going to a top employer like Google, MS, Directi will help you get over the second-grade brand. All of these care more about DSA instead of all projects and specialized knowledge in ML and AI. I know preparing for interviews is boring compared to doing projects but take this advice seriously if you want to get hired at one of the places I listed.

If you are at Vellore (VIT appears to be Vellore Institute of Technology ), there is a world class medical institution in your town (CMC Vellore )that sends many of their graduates around the world to places like the Mayo Clinic and MGH.

They have a well regarded neurophysiology lab that was run by Marcus Devanandan. Perhaps you could do research / collaborate with them.

Thanks for taking the time to help me out. :)

And yeah, I'm currently looking for internships and such for the summer. But the credentials card always comes in play.

Having come from a similar background, I can offer you these suggestions -

1. The level of programming taught in Indian universities is not enough. Writing a sort program is quite different from writing good, maintainable OOP code. Apart from working in a good company, one way to develop this skill (which I feel is critical) is to look and contribute to good open source projects - elasticsearch, spark, etc. Unfortunately I don't know of any good books which teach this overall, apart from specific aspects like Effective Java.

2. Another aspect that I feel is missing in Indian universities is challenging assignments. I would have liked to write my own toy OS to learn systems, or toy kafka to learn distributed systems. The more core computer science fundamentals you master now (preferably through writing code along with learning theory), the better an engineer you will be later.

3. Another aspect that is lacking is the way to reason through things. Indian universities have a third-person approach on the lines of "the experts do things this way so we will just do it this way", on the contrary in a US university the reasoning is more on the lines of "we use to do X, that had Y limitations. So we moved on to Z, now your assignment is to design an extension to Z (say Z+) which solves YY limitation". Unfortunately, I don't know what can be done to improve the way we reason about things.

4. Don't forget to explore different areas. I started with computer graphics, moved on to compilers, then app development, then data engineering, then infrastructure development, then back to data engineering.

That is some solid advice right there. Thanks.
Everyone in our country, from academia to industry, looks at us as second class undergrads

Go and work somewhere where your university's reputation is unknown, then people will rate you on your work rather than the university you went to.

Don't let yourself be entrenched in the things you already know. Take on tasks well outside of your comfort zone and peel away at those problems so you are always getting better.
You are doing great! Don't let institution name bother you, it does not matter much, it helps in getting interviews etc, but if you work smartly you will get that anyway. Few things I would focus on:

1. Build a strong CS and Math background, especially since you are interested in AI, ML. Academia is the best place to do this. Look at the curriculum of top engineering schools like mit, cmu for your sophomore year and see how you can complement it with the courses you are taking. This will pay you dividends in future. You are already doing that, which is great! Try to add more structure to your execution.

2. Take advanced courses on the topics you are interested as you get to your senior year. A lot of MOOC’s have entry level courses but lack on advanced topics. You will find these scattered across university lecture videos, you already mentioned OCW.

3. For prototype projects try building things from the ground up. For e.g. Taking an Operating systems course great, build a simple filesystem from scratch. It will help you in understanding the complexity involved in production grade software and why certain design choices are made.

4. For the projects that you are passionate about deep dive into it, its great to see people talk about their projects with deep technical insight, pros and cons of design choices made etc.

5. Personally I would avoid learning every new language that comes up, focus more on programming language concepts (there is a course of Coursera on this) and learn few languages well.

6. For internships look for startups that are working on interesting ideas.

7. More than the certificates the projects what you did in those courses are more valuable.

8. Enjoy, make good friends, stay healthy and active.

Thanks. I'm currently taking the OS course this sem and we plan to build a minimal OS for raspberry pi from scratch using the linux kernel, writing system programs on top of it.

For internships, I believe start ups are the best bet to gain experience and maybe gain a mentor for life.

That course sounds amazing, you should blog about it.
(comment deleted)
I've been watching a friend follow their passion (food); what they do, and what I do/think in response. At this point - anything and everything to do with food, my first thought it - What's Veronica's opinion on this?

You want the people you know (and who know you) to have their idea of you intertwined with what you want to be doing; now, everything they encounter that has to do with that will get funneled your way.

I am glad to see a question asked from college student. I am always interested to hear from others in college. I am twenty-one-years-old, attending a community college in the states and studying a bit of computer science.

I am going to go off on sort of a tangent and offer you some general advice:

1. Do not worry about what other people think. You mentioned in the beginning of your question about being looked as "second class undergrads", and that is completely false. As Rainer Maria Rilke once noted: "Your life is so inexpressibly your own..."

2. Build things you are passionate about, and not because they'll help you land a job but just for the sake of building things. If you are interested in artificial intelligence or machine learning, learn about them and build something. Better yet, keep a blog and write about the process of learning about AI, ML, etc. Don't be afraid to email some people you look up in the industry for guidance.

3. Keep learning, learn about anything that sparks your interest. Nothing is boring in its deepest essence. There's always something to learn. And if you know a lot, teach it or write about i.e. set up a repository for other people to learn more about it in an easier way.

Above all: Just be you. Don't label or attach yourself with certain identities. Build great things just for the enjoyment of building things. Love the process of building things. Collaborate with friends and colleagues. Go boldly.

Learning, building, etc. is all a joy. Don't try to be the best _____, just build stuff that matters to you.

I love to talk to other passionate CS students too. Helps me reorient and correct my perspective.

And I'm gonna follow your advice and blog about my learning experiences. Infact, there are valuable gems of advice here and I'm thinking to compile them together in a blog post for many other curious students like me.

Hey,

You are already on right track. Just complete the Graduation as it is required by many companies(and visas if you need any in future). Go for fundamental courses more on MIT OCW and others. I also studied in a private engineering college from India(2010-2014). My rant at the time here: https://nainomics.blogspot.in/2011/11/welcome-to-indias-high...

I just focused on my learning. Some professors were encouraging. That helped.

One anecdote: I made a heroku style PaaS for my final year project(like dokku). My professors couldn't understand what it does and why is it even necessary. Their main point was we have "shared-hosting" services to do these(I had to go from php to java/python example then :P). Now after two years they have their industry peers saying docker all over and have called me several times regarding that.

I am now Backend Dev building APIs with Python(Django) and Elixir at a small company. I also have small Open source contributions under my belt. Contact me if you need someone to talk to

Having completed graduation in India with a college much less in glamor than VIT, I would advice you to give yourself some slack and continue working earnestly on interesting stuff. When I graduated, I was deep-down with anxiety to get proficient in frameworks like Rails / AngularJs. Apparently, what were web frameworks in my time are AI / Big Data these days — the skills insinuated as requisite to be taken seriously.

But things are much simpler than that. Programmers solve problems and even the most revered programmers are just solving other programmers' problems. If you are building stuff, irrespective of size, scale or complexity, you're on the right track. Snub the anxiousness of not studying in the top-tier college; it won't matter few years down the line. I certainly can relate to zealousness of solving complex problems, but in my view, it's certainly not a prerequisite for personal fulfilment, or success, for that matter.

In day-to-day work, I am yet to use anything related to AI but every now and then, I find immensely time-saving project that just solved an insignificant problem.

Few tips:

1. Apply to startups. If you are looking to apply to the big four, make sure you do your diligence and work hard at coding contests. 2. Practice peer-teaching. VIT is a huge college. There are more people like you, and you can easily help each other by doing projects together. 3. The industry, in general, rewards freshers who have worked in large teams and projects before. 4. Make sure you get a good internship. Shouldn't be hard for you, but if you are interested, drop me a mail (Razorpay, Bangalore) 5. Go for depth first and then pick your specialization within software. For me it was Web Development and Software Security. Could be anything for you, but make sure you have tested the waters in other fields before picking one. The one benefit of College Life is that you have time to experiment and fail. You can try out projects in all these different fields, and then decide what you are really passionate about. 6. GSoC is a great option. I'd recommend trying for a experienced org over a new one. 7. Avoid freelancing, unless absolutely necessary. It rewards short term gains, over long time learning. You can make much more money cloning WordPress themes and reusing them across projects then learning a new programming language. The latter would help you much more.

I'm very interested in Software Education in India, and if would like to talk more, drop me a mail (email in profile).

Start-up internships and GSOC are the best use of a summer vacation, I agree.

And regarding software education, I believe MOOC is going to play a very big role in the near future especially in countries like India where hard working and deserving students lack quality world class education.

And given the Indian affinity for certificates and credentials, I believe this could be a great start up idea too.

In an ideal world, you won't need MOOCs. One thing I keep repeating is:

    Make > Learn > Read
Where Make = Actually working on a project, Learn is actively learning a topic (via a course or a book you're following), and Read is just reading through books or online guides.

This has served me well as a guide, however it doesn't apply neatly to all areas. Invest in Skills, not Credentials.

(comment deleted)
I checked out the game you developed...looks awesome.

Look - since you are passionate about solving problems and making things, why don't you just create sources of passive income or build some business from the ground up? This way you will be able to bypass any reputation issues that your university has and focus on your creativity instead.

> why don't you just create sources of passive income or build some business from the ground up?

I feel like this is good advice to some people, but it also requires a business skill-set / interest, which is not everyone's cup of tea.

No one really cares where you graduated from. I have worked with developers from IITs, BITS and much smaller colleges. Some of them are smart, some of them are mediocre and some are bad, irrespective of the college they are from.

All that matters is your passion and how much you put into the work you do.

I spent years working in IT before going back to school at night to get a CS degree.

One thing is to just learn the subjects and get as good a grade as possible. Even if a class is subpar, just learn the subject. I had to submit an assignment once about process scheduling in Linux etc. After ten minutes study, I knew I had an A+ on the assignment already. But I had always wanted to look into that topic any how, so I spent several more hours reading about it for myself. I always wanted to learn about scheduling, and if I punted on it then, when would I ever study it? If I did that all the time my skill level would be high.

If you study and get good grades and have a good relationship with professors (go to office hours and schmooze a little, pay attention and participate in class and be prepared and listen), you can always apply for a Masters at IIT or elsewhere. So you can still get that name if you want it.

If the subject is theory of computation and the teacher is sub-par, just go above and beyond. Learn about big-O and the squeeze theorem and pushdown automata for the class, but for yourself as well. Read (some of, all of) a non-assigned book on automata theory if necessary.

Insofar as projects, one thing I suggest is doing projects related to coursework. Toward the end, or right after a class on C++ - write your own C++ program, or fix an issue with a Github hosted C++ program and send a pull request. If it is a graphics class on OpenGL, write your own program in OpenGL towards the end or right after the class - maybe explore iOS/Android OpenGL ES. Or look at scikit-learn after an AI class. Ground some of the theory you learn in class with application.

Your classes covering concurrency and threading and critical sections and mutual exclusion may seem boring in school, but if you're a programmer you will run into these things and you will be happy you learned how to deal with it properly a few years back, even if you haveto go back and read up on it. The AI stuff may sound exciting, but getting all these details right together is what will get you to be a good programmer.

From what you wrote, my main advice is don't be too all over the place. If you have a class in databases and a class in Java, that semester, spend a lot of time learning about the theory, and maybe a little time in application setting up MySQL on your desktop and writing a Java program to populate kt. It's OK to have one other side project going at a time of something that interests you, but you should be spending a lot of time learning about databases and Java.

If you have time on your hands, just dive more into it. For example, in the USA, a drink may be 2.5 liters. In some countries that is 2,5 liters (comma, not period). I once submitted a patch to a Java project doing a switch/case by country. The upstream told me the Java had a DecimalFormat class that already did that. My method was a waste of time, and also less complete. It was something about Java I nad not learned. You're just scratching the surface in class, there's a lot of ground to these subjects.

So get a good grasp of each subject you study. Meanwhile, if you have an interest or specialty you'd like to pursue, do that as well.

I can't really speak for anyone else, but speaking as someone who has been involved in interviewing and making hiring decisions, I don't care what school you went to. I care that you graduated, and I care to a slightly lesser extent what your degree is and what your GPA was.

What I really care about when I interview you is how you answer my questions (this doesn't mean that I expect you to be able to answer every question fully), how well I can gauge the depth of your knowledge, and whether or not I think you will listen to senior engineers, learn what you need to do quickly and with an appropriate level of mentorship, and be a team member rather than someone trying to do his/her own thing.

Ok, I'll admit that someone who went to a for-profit school is going to have a higher bar to pass, but I haven't had to worry about that yet.

But if you are a hiring manager at one of the big name companies you would not even short list non-top tier candidates for the interview. I have been applying since the past one month and its the small companies that respond.

I think someone who has worked in Microsoft - who might not have contributed much - minor bug fixes compared to the guy who has a worked in a startup - build products from scratch and all that in an extensive deadline - staying up entire nights on a new few occasions to make the release date ends up getting a straight reject.