Algorithms
Algorithms
known as clrs. There is no beating this book. It is like the bible for a CS engineer.
Operating System: "Operating System Principles" by Galvin. I liked the book. Read
semaphores well and solve a lot of problems. There are a couple of other books by
Tanenbaum and Stallings which could be useful for certain topics.
Theory of Computation: "Theory of Computation" by Ullman. The book is very hard on
your eyes with so many weird symbols involved, but if you concentrate well, you would
get every point of it. Another one is "Introduction to the Theory of Computation" by
Michael Sipser. This I fiound more helpful for interviews.
Computer Networks: "Computer Networking: A top-down approach" by Kurose-Ross and
"Computer Networks" by Tanenbaum, There have been questions in the past directly
from Tanenbaum. But Kurose-Ross is what I preferred. There are other books by William
Stallings and Behrouz Forouzan which could be useful for certain topics. Forouzan is
relatively easy but i don't advice you to read as the main book for preparation.
Computer Organisation: "Computer Organisation" by Carl Hamacher. The problem with
this subject is that professors in IITs prefer Patterson, but the syllabus for GATE is more
in accordance with Hamacher.
Programming and Data Structures: Have a good hold on basic programming in C.
Coremen is good enough for data structures.
Graph Theory: "Graph Theory with Applications to Engineering and Computer Science"
by Narsingh Deo. I personally did not refer to it for GATE exams but read it for
semesters. It is a good experience.
Database Systems: "Database System Concepts" by Korth
Compiler Design: "Principles of Compiler Design" by Aho and Ullman. Read parsing well
and also Syntax Directed Translation(SDT) well. .
Digital Logic: "Digital Logic and Design" by Morris Mano.
Software Engineering: "Software Engineering: A Practitioner's Approach" by Pressman.
Need not read the whole book but a few important concepts like Cyclomatic
Complexity, Coupling and Cohesion, etc.
Web Technologies: Have an idea about basic HTML, XML, etc.
http://www.quora.com/I-have-a-BTech-degree-from-a-branch-I-am-least-interested-in-HoweverI-am-extremely-interested-in-coding-How-can-I-learn-everything-that-a-CS-undergrad-learnsduring-his-degree
Paras Jain
3 upvotes by Sandeep Goyal, Shanmugasundaram Muthuswamy, and Abhishek Gupta
Pursuing my CS graduation I personally feel that it is really difficult to have nice grip on core Computer
Science concepts. But if you feel to be like fan of 'coding' you can go on with a nice book in say C
(Programming Language) or if you might learnt this thing in your 1st year during graduation go on to
learn C++ (Object oriented Programming). Further to improve your coding skills in C++ you can read
the books like Effective C++ (By Scott Meyers).
Moreover you can go on to learn OS-specific languages like Microsoft .net Architecture languages
(visual C++, visual Basic, C#). Choose any one of them. ( choose Visual Basic if you are interested in
designing GUI programs).
PS These are my personal choices for a beginner in coding. Input from other people are requested to
provide a variety of options to the above person.
I believe this depends on a few things, mainly your goals for learning and familiarity with self-teaching.
If you would like to learn everything for the sake of self-enhancement and are happy with working
things out on your own I suggest viewing the cs curriculums at schools like Carnegie Mellon and
Stanford and matching them up with the MOOCs on sites like Cousera and Edx. It's amazing how much
free information is out there and with the right amount of dedication there's really no reason you
couldn't actually cover the same material they do in the program.
If instead you are more interested in gaining those skills for work and are primarily interested in
programming as you indicated, you may find that a portion of the standard curriculum is not
immediately relevant to daily work as a programmer (example: gate level logic is probably below any
level of abstraction you'll really need to work with but it's fascinating to know why things work). In this
case, the books suggested in Paras' post can be helpful, with the pattern being, read 10-15 minutes, try
the new concepts in every possible way for an hour+ and continue. For practical learning Udacity is an
amazing resource. They tend to cut out a lot of the formal schooling in many of their tutorials and do a
great job of teaching the "doing". Another book I might suggest for learning programming is How to
Program <insert language> by Deitel and Deitel. I used the Java:How to Program book before ever
taking any classes and thought it did a great job of presenting concepts and providing useful examples.
I believe the versions for other languages follow the same structure.
Darshan Hegde
If you can spend Rs 640 , just go to Online Courses - Anytime, Anywhere | Udemy and learn any coding
course you want to learn.
Go to the section , courses for sale , and you will find courses in $10 .
Riyazahmed Jamadar
First learn some basic electronics concepts like Boolean algebra and gates, then study basic
programming concepts with the help languages like C/C++, If you want to pursue your career as
software developer, some software engineering principles you must study.. You can further explore as
your interest dictates you..
NPTEL
National Institutes of Technology (NITs)
Computer Programmers
Learning New Things
Internships
Learning to Program
Programming Languages
Computer Programming
Career Advice
Edit Topics
SHARE QUESTION
I suggest you go for Coursera, Advance Your Career Through Project-Based Online Classes and edX .
They are much better in terms of content and offer verified certificates in exchange for a small amount
of money. You can also choose to do the course for free.
Apart from NPTEL, I would recommend Coursera for its vastness in terms of courses.
Depending on how much time you have, you can target learning C++, VisualBasic, Java, or Python.
If you can structure your thoughts and formulate algorithms, coding should not be much of a concern.
All the best.
Ranvir Raj
If you are really interested in coding, there are many other resources available which are better than
NPTEL. Codeacademy is one. If you want video lectures on languages like C++, Java, JS, .NET you can
go to TrueSchool. It has some really good listings and have courses from MIT also.
If you want internship, focus on one particular language (I would suggest web design languages due to
their high demand) and apply in startups. Startups need interns with web design/coding skills.
Shubham Agarwal
2 upvotes by Vandan Revanur and Anonymous
Murale Krishnen
Just start downloading videos from You tube!!!
Regarding Basics of C, C++
Tread carefully.
If you have natural aptitude for programming it is not hard to do and the chances are you would have
done it by now. If you don't have natural aptitude it is hard work and quite probably a dreadful chore.
There are plenty of programmers who want out of programming and view business analysis with envy something you should be well qualified to do.
My advice would be to get good careers advice involving aptitude tests to see which way you should go.
Alternatively teach yourself programming. A good newbie should be able to write a simple 2D game
inside a month.
With talent it's possible to catch up at programming with those who've done CS degrees, but a CS
degree teaches much much more than programming, most of which will not become useful until later
in career.
I believe that anyone can learn anything if they put an honest effort behind it. Depending on where
you want to go with your programming I'd say you may have a head start on THEM with your business
degree.
Boris Roz
Can you learn it at enough level? Yes you can. Will it be disadvantage? Yes it will be, you will lack of
some (mostly mathematical) skills. CS is very uncommon profession and papers aren't very important
here. Most of employers want to interview candidates, you can be employed w/o paper. But your
problem is that you started late and it would be harder for you to learn. You are not likely to be as good
as guys who started and age 10 and had 12 years of experience before graduation and continuing to
learn more. For an employer larger age is a minus, lack of diploma is a minus, for the same skill. Sorry
for bad language.
I'm answering my own question here. It's been around one and a half year since I posted this
question and I want to thank all those who answered and commented. I really appreciate it. I received a
reply to one of my comments asking what actually went down after this, so I just thought I'd let
everyone know how things turned out.
Briefly after I posted this question, at the end of my 3rd year, I decided to drop out. I was so fed up my
"education" at that point that I'd rather take my chances as a dropout than continue putting up with
the daily nightmare. I did not attend the final semester exams. During that time, web development had
my attention. I instantly fell in love with it because you get to use your own creativity and imagination
and you can build absolutely anything you want, the way you want it, unlike some derivation where
there is a pre-defined set of equations already made up by someone and you just understand or
memorize it and reproduce it in the exam. And I did not mention this in my question earlier but when I
was in the 2nd year, I built a little online GPA calculator for my university and even to this day, almost
everyone in the university uses it whenever the results come out. That was the first time I had used my
knowledge and skills to build something practical that was actually useful in the real world and that is
what i wanted to do.
Anyway, sorry for going off-topic. I got carried away. As I was saying, I did not attend my 6th sem's
final exams, told my mom that I was going to dropout and convinced her that I would somehow make
it work, came home during the vacation and spent the entire vacation just learning more and more
about web development and building a few static and dynamic sites. When the vacation ended, I went
back to where my university is. I was staying in a flat with some of my friends. I couldn't stay at home
because only my mom knew about me dropping out and nobody else in my family did and I wanted to
keep it that way to avoid unnecessary complications.
Around 3 weeks after that I started applying online for a job as a full-stack developer and within a
week, I found one at a 2 year old startup in the same city. It was an already established startup and I
was hired to build a new social writing platform from scratch as one of their products(I don't want to
go into detail about it). I worked there for about 10 months, successfully built what I had to and it was
receiving an average of 7,000 daily visitors within the first month of the launch itself. Nothing that
huge but I was satisfied. When I was building it, a lot of my ideas went into it too and I was more than
just a developer coding in PHP, etc. Starting from the point when I dropped out and up to this point, I
had learnt and grown much more than I had in the last 3 years of college.
While working there, after what I built was launched, I started looking for a new job as I wanted to shift
to Bangalore and very soon, I found one. I was going to be a part of the core team of a completely new
startup still in development in which I'd get some percentage of the founder's equity too. This is where
I'm working right now and I enjoy my job. I've realized that I only scratched the very surface of web
development and there is much more in it for me to explore and learn and my current goal is to keep
becoming better and better at it. And if you're wondering how I'm doing financially, i'm making more
money already than what most of my classmates will be making, who recently finished their 8th sem
final exams and are now sitting at home learning C and SQL while waiting for their call letters for some
software job after spending their last 4 years learning about electric circuits. But most importantly, I
get to wake up everyday and pursue my passion with nothing to hold me back.
Currently, I'd highly recommend Treehouse (http://teamtreehouse.com/) I've had my little brother
start on the lessons, and he's been incredibly engaged by the content.
Moreover, I've been able to tell that the quality of their content is excellent based on the detailed
questions that he asks me afterwards. In fact, I'm often shocked at some of the more detail-oriented
questions that he asks and constantly asking him "they already covered that?".
It's not free, but it's definitely worth the money. Also, the content is incredibly fresh.
Practical Commerce (see here: http://www.practicalecommerce.co...) has some good insights into
building mobile apps for beginners to experienced developers. A couple factors to determine as well
such as:
Do you want to design and code the app by yourself or design the app and hire someone to code
it for you
Here are a couple links to other good topics I have found on Quora:
How do I learn Ruby?
Mobile Application Development Services
Stripe (company)
Square (product)
Pivotal Labs
How do I find an experienced iPhone app developer in Israel?
I'll try and do more research and see if I can find better suggestions and tools to use to keep the cost
down while helping you scale to fit your needs.
non-computer science engineering background and I'm quite good at Mathematics. I have had the
fortune of interacting with, and speaking to a number of super smart programmers. I've been nursing
this ambition to learn programming for the last 2 years now, but I kept telling myself I'm too old for it. All
this has done is to stoke the fire within me and it has got to a point where I am willing to do what it
takes to become a really good programmer. I don't want to set myself a milestone or a target around
the lines of 'I want to become an expert programmer by 2015 or 2025 because it doesn't work that way!
However, I am willing to put in time every day after work, for however long it takes before I can look at
myself in the mirror and say 'Enough of talking crap trying to sell software. Go out and do the real shit!
Go build software'. Am I too old to get started?
Ryan Stout
43 upvotes by Alex Sobolev, Simon Pacheco, Javier Sanz, Coleman Foley, (more)
My brother picked up ruby on rails, html, css, javascript, etc.. in basically a year with very little prior
programming experience. He had some money from our previous startup (where he did graphics) and
he put in 40+ hours/week for the year doing different projects and now I would say he's more
proficient than a lot of rails developers I know. We're doing another startup now, but he could be
making six figures somewhere if he wanted. I think DHH talked about it at Railsconf, but I think this
blog article applies to programming pretty well:http://sivers.org/kimo/ (Summary: there's no speed
limit to learning) One thing I would say is save up some money and quit your job (if possible) and just
work on learning full time (I know its a big jump, but its really hard to do two things at once, especially
when one of those things is learning to program) If you learned Rails for example, you wouldn't have
any problem getting a job if you spent a full year just working on learning it and doing some fun
projects along the way. Just my $0.02
"Never too old to learn more", at least that is what my grad father says. He is about 90 years old still
authoring books about law. So that is that for the last question in your description.
And here is what I can tell you about becoming a self taught programmer.
The rational of becoming a self taught for something is strong. However, it depends on how far the first
initial pushes will get you, because that ambition will need to fuel you to the rest of the way. That is
how you can determine how good or bad you could become at something.
Building a mantra or lets say a rough plan. When I call it a rough plan, I literally mean a rough plan
that will show you from where to go where, not something like 4 steps or 10 steps and if you can't
surpass one then your are done. So here is my rough plan for you:
Fun: You need to approach this as a fun activity to do rather than a learning path that might
never end or your office routine schedule. Here is what I mean by a fun approach:
1.
Gamers: They always want to mess around with their video games, tweak it, make a mod
or just break it in some sort of way, hence I became a programmer (Yad's answer to How many
boring steps in programming were there for you, before it became exciting?)
2.
Researchers: They want to automate some of the boring tasks they have to do in return
to get the fun results they need, thus they learn most of what it takes to get those things out of
the way.
3.
Puzzle lovers: Computation power can always come in handy to do some calculations
that we don't want to redo every now and then over the path of solving a big puzzle. (Puzzle
here is a metaphor for big problems).
4.
Sales & Marketing ?: Welp, that is for you to answer what's fun in pursuing the field in
the first place and now you can bring in programming power.
Same goes to any other field, since nowadays technology and programming have evolved enough to
effect every field of work & entertainment.
Fundamentals: Getting to learn 101 programming is not hard, in fact there are hundreds of
websites and academies online that teach 101 programming. But the other important part is
learning the fundamentals of computers and how they work, otherwise you could get carried way
and not knowing how all this gibberish on the screen is showing up.
1.
2.
Learning about data structure of the desired programming language can be quite helpful.
3.
Exploring algorithms and why the heck this thing is even important and how it can make
our your life a programmer easier.
Execute: Once you learn something try using that piece of info to create something out of it.
Perhaps, some schools capture this aspect in a good way. The students spend 16 weeks or so of a
semester to learn 7 to 8 concepts of programming and solving few problems a week using that
concept.
Learn by doing in terms of the small pieces of information can be your boost to:
1.
2.
Assert the knowledge once your brain tries to use a concept to solve a problem.
Community: You need to find some partners to be doing what you are doing, luckily nowadays
hundreds of online forums and websites can help you make this happen. Choosing a technology or
a programming language can always become a tricky thing, but you can always turn to the one that
has a bigger community and beginner friendly.
Repeat: Once you get a hang of how you learned one part, then you can go back and repeat that
same process on the other parts of the programming language. Being obsessed with learning
something can help find fun, learn basics and build further.
I can tell you that it takes time. If you are not patient then you will give up pretty soon. It takes practice
and building various bigger pieces to get perspective on how to approach larger problems.
There are a lot of resources out there, but I recommend using something that is comprehensive & self
taught friendly content.
Online Paid Courses:
Lynda.com have very long courses that can walk you through the basics of numerous
programming languages.
Tuts+ have some of the best short courses that can be handy, but not too detailed due to the
short episodes.
Free Courses:
This is very well recommended by many:
There are free courses from MIT open-courseware MIT open-courseware introductory Programming
Courses and also rest of the available ones on Coursera. Here is a rough list of the course lists:
1.
Here's a list of 154 free online programming/CS courses (MOOCs) with feedback(i.e.
exams/homeworks/assignments) that you can start this month (June 2015)
/r/learnprogramming:
2.
prakhar1989/awesome-courses
Table of Contents:
Systems
Algorithms
CS Theory
Introduction to CS
Machine Learning
Don't get lost or feel overwhelmed by the amount of content. Just choose something like an
introductory programming course and go with it.
Books To Read:
Aaah, there is just a lot, but I would still recommend reading some of them if not most, because books
are a different source informations that you can' replace.
Quora list: What are some of the best books on computer science?
Reddit: /r/books-list.
Also one last piece of advice, don't get too attached to what you learn. Specially programming
languages, a lot of people feel violated once they are told a technology have become obsolete. Hopefully
you will become a great self taught programmer, but just don't be one of those. Adapt and learn once
there are new key player technologies in the field and remember to have fun.
When I was 9, I remember refusing to take piano lessons because I thought I was 'too old to learn'.
I'm a bit younger than you are (23), but I committed myself to learning to code about a year ago and
today I consider myself pretty capable in a bunch of different languages. I put in 60-80 hour weeks, got
totally obsessed with it, and wouldn't step away from my computer until I had figured something
(whatever the topic was at that time) out.
The most important aspect of self-educating is really loving what you're doing. If you're unhappy
sitting at a computer and struggling with a bug for a day straight, you're going to give up pretty quickly.
Otherwise, you're going to learn a lot and it's going to be fulfilling. The more I know about
programming, the more I realize I don't know. But that just makes me want to learn more, study more,
work harder, and I think that's the key.
You'll know right off the bat if it's right for you. Start with something like Intro to Computer
Programming from MIT OCW (free online lectures), which is a fairly dry intro, and if you love it, you're
golden.
Anyway, my answer to your question: Talent can't be ignored. If you can code with the best of them in a
few years, no one's going to care how old you are (I wouldn't, at least). More importantly, no browser,
compiler, or interpreter is going to reject your code just because you're almost 30. Well, maybe IE6...
From personal experience, drive and interest are more important than age. My mom was in her late
40s when she started programming, and she now does it comfortably for a living.
Base on your background, I think you will have a lot of fun learning to program. I might suggest you
spend a month to follow every example and do every exercise in the first 6 chapters of Dive into
Python. It will get you to a point where you can perform typical useful tasks.
http://www.diveintopython.net/to...
Joyce Babu
8 upvotes by Kunal Suri, Marlo Buarque, Mike Xie, Jatin Dhankhar, (more)
I took Biology for my +2. Electronics and Communications Engineering for graduation. Worked at one
of the top 5 IT companies in India as a data warehouse developer. I learned shell scripting during this
time. My Project Manager once told my team, "We made a mistake in selecting Datastage for this
project. Instead we should have asked this guy to develop the entire thing in Unix shell script, and we
could've completed the project in half the time". That is one of the best compliment I have ever
received.
I have resigned and created my own startup. I've hired fresher's from IT background, and taught/teach
them PHP. I've written simple programs in Java, Python and Perl. I've written a PHP module in C.
I was able to do all these without any serious IT education background. So, the answer to your question
is YES. You can be a self taught programmer.
Choose a easy to learn language and start learning. You don't have to learn every feature of the
language before you start. Try solving simple problems with the chosen programming language. Try
contributing to Open Source projects. Once you get the hang of it, learning another language is very
easy.
You'll never know for sure until you try.
The answer to "Can I become a really good self-taught programmer?" is alwaysyes. In fact, all the
really good programmers are self-taught.
Tracy Lauren
23 upvotes by Hong Chung Chow, AAkash Mishra, Timothee George, Jigyasu Arya,(more)
Here is a tutorial my physics professor wrote. I learned python through this and with it discovered the
wonders of programming.
http://physics.nyu.edu/pine/pyma...
With this and codeacademy.com you can get a good handle of what programming entails. Afterwards
you can start to learn java and for that here are two resources you can use.
1.
2.
3.
Good luck!!! Its definitely a great time to start and have a lot of fun with it!!!
Lance Walton, Father, Programmer, Failing Composer
2 upvotes by Ali Hassan and Quora User
You're in your late 20s, not dead. Start reading, writing some code, build something small that
interests you, find some local group that can help you, etc.
If you we're asking about being a concert pianist, I'd probably suggest you do something else. This isn't
that hard.
But as well as learning a language or two and some libraries, I strongly advise you to learn some
fundamentals. Watch the SICP video lectures for example (http://lmgtfy.com/?q=SICP+video+...),
relational database *theory*, different methods for concurrency, etc.
You're only too old to program if you're too old to learn. I started when I was 29 and have been working
as a programmer or consultant for almost 20 years. In my experience, when you start late (once you're
beyond the 'I'm obviously a beginner' phase) people assume you've been at it since you were 14 and you
have a comp sci degree and all that stuff. Just make sure you don't let them down.
I never knew anything about programming before I took introductory programming class in my first
semester of freshmen year.
As a ME student I had to teach myself without taking CS classes during semester so I simply went
through all the lecture notes on Data structures, OOP, and I also did assignments that were handed out
during semester. I also did some class projects in standford (i.e. Pintos)
Aside from those 'academic programming', I got into hacking club in my school, where I learned linux,
python, unix api programming, and a general sense of how to teach myself by googling. I also had to
learn how to hack websites so I taught myself web dev in w3school.
I generally know more than my CS friends, not because I took more classes than them but because I
kept asking questions anything how computer works. So keep asking questions - how does compiler
work? How does facebook remember me?
Some stuff are too sophisticated to be on google. Thats when you go to amazon and buy the book.
EDIT:
I didnt' write the details because my phone was short on battery. This is the path I taught myself: (in
order)
1. C/C++
2. Data Structures
3. Computer Systems: A Programmer's Perspective
Gives you a better grasp of how computer works and what you would be dealing with when you become
a developer. I think this is something that distinguishes self-taught programmer and formally educated
programmer.
4. Operating Systems Concepts(The dinosaur book)
I finished the pintos project( course project in OS class in stanford).
After you read these, it entirely depends on which part of computer science you want to stress on. I
excluded those frameworks/language/linux because I think they are something to get used to by laying
hands on, not to be studied so seriously. Although people distinguish 'formally educated' programmer,
I doubt they apply more knowledge than they have learnt from above list when developing. (Of course,
some sophisticated subjects such as vision processing, graphics, algorithms require further studies).
I learned to program on my own starting at age 12. My path probably isn't for everyone, but learning in
this order really helped me.
I don't remember when I started but I have strong high oriented bias from beginning before knowing
about higher level languages. I started with some kind of BASIC on AMSTRAD then QBASIC on DOS,
VB on Windows 2K... but didn't dive too much and never completed more complex programs than
calculators. BASIC, QBASIC and VB expressive power as programming language was too poor for
keeping my interest high enough.
Later, I learned about PHP/mysql and build somekind of social network when blog and pingbacks were
all the rage (around 2003). I don't remember struggling much, nor about much copy/pasting.
copy/pasting is no shame.
Since then, that's what I do. I have an idea about a program that interest me and build it, gathering the
knowlege where ever I can (mailling lists, planet's like Planet GNOME, scientifical papers, other
software's code, technical blogs, conference talks e.g. , hackernews, lambda the ultimate and... Front
Page...) mostly on the Internet. C is the only notable exception, which I learned in a book from
University's library, it's not K&R. If you plan to learn C++ I advise you to dive into C++ Frequently
Questioned Answers
In 2006, I build my first project for school in Python. Since then, I have an hard time putting it aside. I
had to learn, for school, other languages like C, C++, Java, Caml, LISP, Prolog, 68K asm and did some
electronic stuff. And still much prefer coding in Python. The the first advice I give to any aspiring
Python dev: you will learn Python, it's easy, but it will bite you. Stay open minded and learn other
languages at least a low level language like C.
I don't like much "schedules" or coder's challenges like project Euler, I prefer the
@http://datascienceretreat.com/me....
Basic understanding of major Data structure and the related algorithms is helpful, knowing them by
hearth outside interviews with big corporations is useless. Try to extract the substantifique moelle, the
essence, the general ideas behind those algorithms like @http://en.wikipedia.org/wiki/Div.... Don't
push you too hard, (deep?) understanding can take time.
(Wikipedia is always a good source of knowledge in computer science, basics are readily available, but
most of the time it's not enough)
Go for the obvious first! In particular, at first, don't try to understand "which web framework is
better?" it will delay your project first version without much immediate benefit. And you will have an
harder time to market professionally the skills that you might get from it. For instance:
- JS -> learn angularjs (after learning js of course)
- Python -> learn django
- PHP -> learn symphony
Also, don't start coding kernel linux drivers right away. But start with C language nonethelss. If you are
interested in Linux kernel readhttps://lwn.net/
Anyway most of companies look for "code monkeys" and that's the primary asset of any good engineer.
Summary:
- Starting with dynamic languages is good choice (anyway...)
- Have a "product" goal in which you have strong personal interest
- Cogito ergo sum: think, create, learn and stay open minded to other and new things, be rational.
This is the mindset that led me to what I do now, and allow me to feed my body, even if my mind is
feed by what I'm planning to do next...
Also I advise you to dive into Software Craftsmanship even if you won't learn "code monkey" skills that
can be easily marketed. Some people, still replace "engineer" by "craftsman" on their resume.
b) learnt about mobile dev with java on the android platform- it was fun and I learnt to debug as well
as generally becoming a better developer.
2. Decides to learn some python and a tiny bit of Django.
3. Functional Programming using SICP.
4. Bits of DB(sql), web development(java ee) etc.
I hope to learn:
5. Objective C and some more mobile dev.
6. Advanced topics such as OS, architectures, networks, AI and so on but i am not certain of a
curriculum for that.
I have also been learning a lot of the math but I have been doing that anyway just for the sake of the
mathematics.
The hardest thing to do at home will be learning team skills and project flow.
Things that are commonly left out:
You should be working with git and Github (or similar repository).
You should learn how to plan a sprint and communicate that to a team.
You should learn how to talk to users of the software you build.
You should learn how to admit when you're failing (whatever that means to you) and ask for
help.
You should cultivate relationships with mentors.
If you want to learn to code this summer, use The Odin Project. It's free.
http://www.theodinproject.com/
Edit: "Summer" is a reference to the OP's question, not the length of time required to learn a new skill.
In terms of time, 1000 + hours would be required to learn to code.
Students don't have practical knowledge. They just know some basics. & the company will have
to teach us what professional working knowledge is.
It doesn't matter what students know, they are gonna allocate joining dates & projects as per the
company's requirement & not according to what students are good at. (Debate this topic with any
amount of engineers & more than 95% will agree.)
Now for the good English speaking student's selection syndrome -As they know that all the
students need to be trained ground up, students with good spoken English, can have edge over others
in following ways
Can be trained & assigned to some product based project. Product support. Training is not that
tough. Skill-set easy to acquire. They can be used for client interaction as MNCs mostly have big
products already built with recurring client support-n-development.
Training them is easy, skills or not, they can be put to other uses, like admin, documentation,
etc.
An Engg technically strong is good for development itself, while a good communication skill-set
having student if trained & gains good knowledge, has a better progress graph.
MNCs also have to think of their employees, from the point of view of presentation while
communication. Hence the edge. If they communicate & present so well in college, they may have
better prospect in their company in future.
I am saying this from experience as well. I had 4 MNCs come to my college in my final year of
engineering. They selected about 65 student from the batch of 110. About 90% of the selected students
did not have any technical knowledge. Even the final year projects were purchased by them from
outside. Some of them were good in college debates & all. And yes, these no technical knowledge
having candidates got selected as well. & as i said earlier, CURRENTLY, they are either on backend
office work or some "Product development" work.
For me, these MNCs were offering jobs in Pune & me being from mumbai, I didn't bother sitting for the
campus drive. Anyways, I was avoiding MNCs at start of my professional career as I wanted a specific
job profile & MNC's happily won't give you that. Until they are technology specific giants like
Microsoft/Google. :P
Now I am a drupal developer & I am glad that now MNCs use Drupal on large scale, as well. I also work
as a drupal freelancer in Mumbai, whenever I get time.
A happy drupal developer.
Companies like TCS, Wipro, Infosys, IGATE et al fall into the wide ambit of what are collectively called
as IT companies in India. These companies mostly operate in the service sector and occasionally delve
into core engineering services, but delegate such projects to their core teams. When coming for
placements to college campuses across the country they usually look for the following qualities and
select those students that satisfy a majority of the set criteria:
1. GOOD communication skills : This forms a very important aspect of their selection procedure. I
have stressed on the word good because they are not looking for excellent orators or public speakers.
And contrary to popular beliefs, they arent even looking for students with great English. They want
students who can COMMUNICATE well. The emphasis here is on communication and not language.
There may be a few people out there with a fairly good grasp of the English language but are unable to
effectively express what they want to express. Such students get weeded out in later stages. In short, if
the recruiters feel that you are able to effectively tell them what is on your mind, convey your ideas with
fluency, even at the expense of scoring low in the English department, they will rate you well and will
most likely consider you for the next stage. The intent of looking for graduates with good
communication skills is fairly clear the service sector involves a good deal of interaction with the
clients. And in companies as large as TCS, Infosys, etc., there is a good chance that the Clients may be
from other Countries. So it becomes important that the graduates are able to communicate properly. At
the end of the day, no one is going to judge you for your grammar or sentence structures, it is all about
the ideas you have and how you can present it to someone in front of you. If you are able to do so, by
whatever means necessary, you are the right fit.
2. Decent Technical Knowledge : It is wrong to assume that they hire students with ZERO technical
knowledge. That is never the case, and even if it does happen, it is on very rare occasions. Such
companies do not want brilliant technical minds for a variety of reasons, the biggest being the fact that
such graduates tend to always look for something more technically challenging and a bigger pay
package. Also, some people are not tailored for a desk job and get frustrated with the occasional
monotony of the work environment. So IT companies steer away from hiring such students as they are
fully aware that such students will eventually, within a couple of years, move away to a different job. So
they look into the next level of technical minds. The supposed second benchers. The ones who have
managed to maintain a decent and average CGPA and have breezed through college, one exam at a
time. Do not get me wrong, some of these people are technically very adept and skilled too, but fall into
a more chilled out category. The ones that IT companies are willing to wager that they will stick around
longer. (More often than not, they are wrong here. But I am no one to say.)
3. Diversity : It can also be seen that such companies hire from pretty much all departments and not
just CS/IT for the role of developers, etc. I remember asking for a reason when they had come
recruiting to our college(no names taken) and the answer I was given was that they are looking for
Engineers. Not just application developers. While at that point, I did feel that I was being given a BS
answer, it is only after a fair amount of thinking and reading on my part did I understand that what
they said was spot on. As an Engineer, you are trained to think with a certain technical tilt to your
perspective, regardless of which trade you belong to. A mechanical engineer may be able to come up
with the solution to a problem better than a CS grad, it all depends person to person. Out of the box
thinking or a technical way of engineering a solution to a problem is not limited to CS/IT crowd.
Problem solving skills is the requirement here, not your coding abilities.
4. People skills : Team play and ability to handle, interact and gel well with other members in a team
forms an important skill set that recruiters look for in a new recruit. The main reason behind this being
that compared to other companies, IT firms generally tend to have larger and more structured teams
and it becomes imperative that the fresher be able to handle co-workers at all the levels of the
hierarchy.
5. All rounded competence : Whatever may be the criticism against the hiring process followed by
some of the afore mentioned companies, one cannot deny that only competent graduates are hired.
While they may be lacking in some aspects, they tend to make up for it in certain other aspects. This
leads to a workforce that is over all quite well balanced with a healthy mix of a variety of workers. No
two people are the same and it is unrealistic to expect companies to hire the same type of individuals. It
is also incorrect to generalize on the quality of recruits based on just a few of them.
All in all, in contradiction to what society tells you or perceives it to be, working in an IT company is a
part of the learning process and should not be looked down upon. Also, it is not as easy as people make
it out to be to get into one of these companies. It requires a certain level of preparation that must not
be neglected.
The Service sector in our country is the fastest growing sector. While some can argue the lack of job
security or pay in such large firms, the fact remains that if you are competent, you make it. Regardless
of the external circumstances.
I hope that answers your question. I may have beaten around the bush a little, but that was to just lay
the groundwork for my answer.
In todays world communication is only through english. writing, speaking skills, presentation skills etc
can only be learnt over a long period of time. These companies don't select ppl just with good
command over english, but those also who have basic knowledge about it and show promise to learn
and improve. They don't select freshers with zero technical knowledge but those who have scored 70%
+ at graduation and at some time in their life have studied any programming language or anything
related to IT. business skills or language can't be learnt easily but technical skills can be. Hence more
emphasis is put on language. And answering to someones question above that if students can't learn in
4 yrs, then how can we learn in training period. What we learn in college is so much different from the
actual requirements. So they train us according to their needs.
Dhruven Vora
6 upvotes by Yogesh Kukadiya, Eeshan Mishra, Zeeshan Siddiqui, Aniket Thumar,(more)
Companies like TCS,Infosys, Capgemini etc.(will be refered as IT companies hence forth) provides
consulting and IT services to the clients. They generally deal with clients in markets like US, Europe,
Africa. English is the key that keep these companies in the competition.
Here are some of the reasons that Indian IT companies hire students with good English but may be
'Zero' in tech.
1.
2.
Since the projects are time bound and large in scale, the team size needs to be large. This is
called "showing skill strength" in IT industry. more the skill strength, more are the chances to win
the deal. Here also cost matters.
3.
IT companies often need to co-ordinate with the clients. This result in frequent visits of
developers to support the clients technically. English is mandatory for effective communication
here.
4.
Every developer does small tasks and with require a specific skill set. which is imparted to them
through trainings.( and Google is always there to help)
5.
Last but not the least, Quality of education in India shows what kind of engineers will be
produced. So its impractical to find all the employees with all the skill set (here very good technical
skills).
Sometimes they even take people with bad English. The Indian IT industry is all about dealing with the
client with diplomacy. The interviewers know that the top engineers will anyways join product
companies where salaries are better. They look for people with enough intelligence level to go to their
local subzi wala and buy tamatar for 10 when the sabziwala says 12 and later come home and boast
about it.
If you know something you should be able to communicate that knowledge to others.. This is the aspect
of service based companies where you communicate with clients and provide solutions to there
problems.
I would not agree to statement that they take people with 0 technical skills.. I've been there and
experienced that believe me they care for knowledge more important they "judge your potential of
learning"
That matters to them.
And I would like to take this opportunity to clear misconception about service based companies there is
nothing "core" in it industry. People on service based companies work on same technologies as
product based companies but the difference is that they focus on technology which are more business
centric. But what's the problem in that as technology is ment for providing service to people like tcs
managing psk in India.
Rather then some product based "core" company making Firefox plungins.
Richa Ritwika
3 upvotes by Sumit Pandey, Shahid Athani, and Rahul Srivastav
These companies are global IT service providers and they have clients from places like US, UK,
Australia, etc. Thus it becomes essential that people they hire are able to understand the needs of their
clients. So in this english plays an important role. As far is as technical knowledge is concerned the
knowledge is checked during the interview rounds. Also companies like TCS, Infosys, and Wipro invest
in training of employees when they join the company. Thus technical knowledge is provided during the
training program. It will sad to say that people who are hired in the engineering field are at zero
technical level because I hope you do understand engineering is technical course so how can one have
zero technical level.
When I say demand which means high value work that would differentiate us.
When that tech vitality grows to high value you'll find language being dimmed and maybe you can have
translators and express yourself.
Anonymous
5 upvotes by Sarang Kaur, Deep Saha, Shivanand Kalshetty, Santosh Ramu,(more)
Having worked for one of the above mentioned companies, I have experienced that common sense and
little dedication is more than enough to excel and be recognized for your work. Also communication
skills would come in handy to handle clients or your managers. Hence the same is looked for in their
interview processes.
There is nothing that cant be found on google :P Who needs technically brilliant guys when the work
quality itself is not expected to be brillian.
Also they wont be able to afford the really good people.
As you know that TCS, Infosys are MRC ie. mass recruiting companies
When they come for campus placement, they recruit in large number because they only want people
who knows how to use a computer
They give training for a few months .So, they don't care you are from which branch .
Another aspect is that they have a bond of 2 years ie. after you join ,you can not leave the job or else
you have to pay 50,000.
In this way also they make profit as their packages is around 3.16 lakhs .
Deepak Gupta
7 upvotes by Shahnawaz Ikhlaq Ahmed Khan, Susharm Munawalli, Suraj Tamgadge, Mahantesh Patil, (more)
Its a tough worl out there buddy. First of all, had these companies hired zeroes, they wouldn't have
been able to get repeat business and become billion dollar behemoths.
Secondly, understand this simple fact. These companies are servicing clients from US, Europe and
Australia. All places where English is the means of communicating. If you can't communicate with
them, you can't do squat. No understanding of what they want, no signing of SOW, no nothing. So if
you are looking to get some villager who might code in C but speaks like a villager, then you are not
getting hired. Technical skills can be upgraded and companies spend a lot of money to do that.
However, they don't want to start teaching English to a 23 year old.
Because,acquiring project from a client competiting with other firms is gigantic task.....this task is
accomplished by top level managers...thru their fluency in language....
Secondly,u must convince the client in suitations of discrepancies....like code bugs....or u applying
some cheat code.....
most important of all,speak confidently and flawlessly....
Nilaratan Das
3 upvotes by Chanchal Khemani, Saikat Guha, and Rajnish Kumar
As we know, IT is all about Information Technology and we need to play with information. In global
business English is the one medium to share requirement. Those have good command over English
they can easily analysis the problem or issue. And also only English skill does not fit in all the
organization. Hope this will find well.
In many consulting companies people with engineering degree doesn't do any engineering or develop
products! they just manage them and companies believe that a person with good communication will
have ability to learn more than that a person with low communication.
don't say such things for these companies and people working in them. we are living in a society with
variety of needs. guyssss,,look at the bigger picture: some IT guy earning 30 k per month.....now this 30
k go to different people......rashan wala lala, press wala, sabji wala, kaam wali etc etc....dont you think
this IT guy contributing to earnings of so many different people....may be this 30 k look a meager
amount in present scenario but this amount definitely adding to lives of many guys and their
families......an average guy getting job, earning his/her livings is always better than an unemployed
youth....
Majority of their business is to maintain already existing applications for which communication is vital.
They r not building the next google. They r looking for clerks with average technical knowledge.
Braj Mohan
4 upvotes by Kowthamraj Vs, Sarath Kumar, Tajammul Pasha Zuffari, andDhanashri Kulkarni
Name any compiler , OS, programming language etc made by any of indian IT companies.
(Forgive me if you can quote any rare example)
So whats the need of super technical knowledge to get hired in these companies ?
Anonymous
They hire only when there is requirement (every one knows that). If the requirement is 100, they hire
more than that like 130 or 150. some very good in english some zero in english. then they give training
people who fit for the project will be put in to it and others will be put in to bench and later in to some
call taking process and night shift and crap according to the requirements. Then these students (not
even students, even people with experience by faking about the job profile) will start fighting, crying
and contacting HR to get a a good project.
The above mentioned is not my experience, but of many of my colleagues. Some people might not
agree which i don't care. Just wanted to share it.
It is because they know that whatever theory students have learnt in their engineering will rarely be
applied in such companies. Hence they take people with good aptitude and communication skills as
such students can grasp their training material soon and be one more robot employee like the rest!
Anuradha Lakra
1 upvote by Shlok Varshney
I also have discussion about this thing with one of my friend from MNC who went out for campus
hiring as recruiter. He said we hire on the basis of good communication and confidence of the
candidate. By this attitude most of the deserving candidate stay back. This criteria of selection is very
wrong . They do not want real engineers. They believe any donkey can be trained and used.
Srinivas Vaasu
41 upvotes by Akash Agarwal, Ronak Jain, Aakhil Shehabaz Shaik, Parth Shah,(more)
I remembered the word said by a great person from india "we are hiring the graduates who have 85%
communication skills and 15% engineering skills". That is the reason worlds gaint companies like
Microsoft,Google,FB,Yahoo,Twitter now instagram,pinterest etc was not found in india.
Anonymous
Dont you guys think, such questions have an adverse affect on India's future, and companies who wish
to outsource back off?
I have worked in some companies and most of the projects require decent understanding and
managing the existing code.
Devarajan Mathan
Several of the activities [ Business ] in these companies are to do with talking / writing clear
communication with customer[s]. Hence they insist on this. Parents are more keen to trumpet that
their wards are at these companies rather than in a core Engineering Company
Asif Ali
1 upvote by Subbu Royal
The answer is simple. Actually this answer is given by the TCS associate who came to our college for
pre placement talk. He told that it is easy to give someone technical training than language training. I
agree to this point.
TCS CTS recruits zero knowledge people. The rest require a bit of knowledge. Also it varies based on
the position you are applying to. Looks and presentation matter as well.
English because most of the customers are from English speaking nations.
It can become French if suddenly and miraculously a million French customers spring up.
First of all, these companies dont need an engineer.They need a english speaking labourers who could
handle their clients.
Yogesh Kukadiya
8 upvotes by Shivanand Kalshetty, Kapil Dua, Bhumika Singh, Anbudan Shakthi,(more)
@Aishwarya Kulkarni
If they can not acquire technical knowledge in 4 years of engineering then how is it possible with 3
moths training?
education can be learnt but manners and makeup can never be learnt. so that's y they take students
who can makeup situations
Anonymous
2 upvotes by Kamal Keswani and Krisha Raajan
You are not correct. These companies hire people who have technical knowledge but zero in English.
You will feel like vomiting speaking to the villagers who join these companies
Is that true ?
I guess then they should be having english test instead of technical interviews.
Shanmuga Sundaram
Great Question. I too was thinking this for a long time. Not only MNC, 99% of IT companies in India do
this.
Dheeraj Agrawal
3 upvotes by Gowtham Raj, Dipak Raghvani, and Krupal Shah
Chalam Ratnala
These are not IT companies , These IT factories
http://www.quora.com/Learning-to-Program/I-don%C2%B4t-have-troubles-with-problemsolving-but-when-programming-I-feel-like-I-waste-too-much-time-on-stupid-simple-things-likesearching-for-a-forgotten-semicolon-or-things-like-that-How-could-I-fix-that
What can I learn right now in one minute that will be useful for the rest of my
life?
Jay Mehta
2.4k upvotes by Diya Gem, Zoya N. Faruqui, Abhinav Srivastava, Keerthi Ganessamourty, (more)
When your cell phone charger is plugged into an outlet and not charging your phone, the charger still
draws current (~0.01 amp); which means your charger still uses power (~1.2 W) even when it is not
charging your cell phone. There are 6 billion cell phones in the world. If everyone leaves there charger
connected to an outlet, how much power (in GW) is being wasted? ANS: 7.2 GW
So, the next time you are done charging, remember to remove the charger from the outlet.
Here are some facets of software development that are realistic and delineate the difference between a
software engineer and a hobbyist. Focus your effort in this realm, and you will certainly learn a lot.
Almost all of these are missing from the application you've written. Incorporate them into your
program.
Deadlines. "We need this by Tuesday, even though you're working on that other thing that's also
top priority."
Teamwork. Code reads. Source control and flow. Learning from others. Designing your
application so others can read and modify it, and making it modular enough that work can be
parallelized.
Public relations. Yes, I said "marketing" is an important part of being a software engineer.
Quality assurance. Did you write tests? Are they automated? What do you do when you can't
write new code because of bugs?
Business cases. "We have to make this multi-tenant for cost savings, but the tenants can't see
each other under any circumstances!"
External requirements. For example, the full-disk encryption. Maybe you wouldn't add that
because you want to, or because it makes sense for your business.
Deployment/rollout. How do you get your code to your customers? Hosting it on SourceForge
won't work forever. Besides, how do you build and package your application?
So, how can you add these things to your application? Here are some ideas.
Open-source it.
Host it somewhere, and then offer a "hosted" solution, which you must deploy and maintain.
Think Wordpress. You can download the open source version, but you can also buy a Wordpress
blog onWordPress.com.
Marketing. Get a twitter account. Start a blog. Make sure you've got a web site. Write about it,
accept interviews on TechCrunch.
Open-source it. More people working on it will force you to learn about teamwork.
Since you're marketing it, start announcing impending releases and their dates. This will keep
you honest about your internal deadlines and milestones.
Use some project management software like JIRA, for example, and make it publicly visible.
Cassandra does this. People can file bugs, see bugs, see features, and see their progress. That's
transparency.
Offer "enterprise" or other special editions. This will teach you about maintaining different
versions of your application, and how to design your application to avoid code-copy or similar antipatterns.
Write tests. For everything. Functional tests, integration tests, unit tests, and so on.
Look at TravisCI. That's good for open source projects. It'll keep you honest, and you'll have
builds. You'll have to learn about releases, announcing them, supporting legacy versions,
backwards-compatibility, deprecating features, and forwards-compatibility.
Sell it. Well, license it. Or something. Obviously make sure your open-source license permits it.
I don't care if you only sell 1 copy to your grandmother. It's not about making money or starting a
business. Don't worry about that. But if you sell it, then you have a customer. Now you have
business cases. You have requests. You can even sell it for free. I mean, it's open source, after all,
right?
Disclosure: I'm a self-taught engineer. I've done all these things with open source projects. They were
all "failures" in that none of them made me wealthy. But they were all successes in that they yielded the
experience and skills I needed for my career.
Trying fixing the problems you find. Some of them will be really hard to fix - those are the places where
you made bad design decisions. Consider how you might have written the application to make it easier,
and then rewrite it like that. This is how you learn.
There is no easy answer, programming is hard. That's why it can pay quite well. If it were easy,
everyone would do it.
I've written this before, but it's important to understand that schools prepare you with the basics and
then the most important thing you will get from school is learning how to learn so that when you
get into a job you will be quicker on the uptake. It is physically impossible for them to prepare you for
any possible situation, the field is much too large. Chances are when you get your first big job you
won't be using anything close to what you did in school (computers, languages, problems), etc.
So, on to advice:
Intership
Most big companies and many small companies (especially startups) have short and long-term
internship programs. You won't get a lot of pay during this time, but since they are giving you realworld experience and a regular staff of developers that you can use as a resource, it is usually well
worth the time.
Be aware though that in some big companies the intern program can be very (very!) limited in scope.
Many big companies have internships that are well supported at a high-level, but in the trenches the
programmers just see it as a drain on their time (and one forced on them to varying degrees) and
without their buy-in you will find yourself either doing scut work or simply ignored. When you
interview, think of some questions to ask that will identify these situations.
Software startups are a much better deal, in my opinion. In a startup you usually have a small stable of
programmers who are dedicated to the project and can't afford to hire an intern that won't pull at least
some weight (though the expectation will clearly be less than an experienced developer). Also, in a
startup, you generally can't have specialists, everyone has to do multiple jobs (it's just the way it goes
with a limited budget). Don't turn down any challenge, even if you fail you will learn plenty.
Any way you go, you will get out of it what you put into it. If you fail to take advantage of the more
senior developers to teach you new stuff, then it's all on you. If you don't look through their existing
code trying to learn how they solved the various problems, that's on you too. Take every opportunity
for code review.
Remember that when you are interning, nobody there wants you to fail. Take every comment from
that standpoint, and figure out how to learn from each experience.
Open Source
Join an open source project (or two or three). Find a project that interests you, but be picky as well.
The quality of the projects out there in open source land range from complete crap to genius. You
might not want to jump into genius just yet, but you definitely want to avoid the crap. The good thing
is, by definition, there is lots of code available to you before you even approach the project, so you
should be able to gauge the quality of the code (and test the program to see if it sucks).
Be ready for some very harsh (or apparently harsh) criticism, just like any other open forum on the
Internet. Some people simply can't write text criticism in a way that doesn't come across as harsh.
Don't take it too hard. Also, in most projects there is a gatekeeper for vetting code submitted by
unknown programmers and not every change you make will make it into the code base, often you will
get no clear reason. Keep at it, since you probably learned something making the patch, even if it
didn't get in, you aren't the worse for the rejection. If they give you detailed reasons for not including
it, pull out the pearls and let the rest lie.
It's something of a catch-22: you learn the most by doing and solving problems you encounter on the
way.
Start a hobby project - plan it out so that you can start small and get the basic parts of it running easily,
then add more difficult elements onto what you already have.
You'll probably benefit more from a series of increasingly complex projects than from a single massive
one.
Never settle for "good enough" - always check if there's a better way to do something.
Don't forget to go back and update your old projects as you get better and discover better solutions - it's
a good way to practice and push yourself further.
Ilya Simkhovich
ok, i read the answers so far but they're vague and generic. you should have explained what you call
"the basics". i assume you at least know what variables are, how to declare them and change them. you
probably understand loops and how to use an array. you've probably played with finding a random
number. you understand strings and how to read input and parse it to determine if it's valid. you know
what a sentinel is.
those aren't the basics. the basics include all that and higher data structures, collections and
interfaces/inheritance. you need to understand stacks, queues, linked lists and hashmaps. those higher
structures, as well as objects and overloading methods, are important when necessary. you should
know when to use which structures for efficiency and memory usage. you need to understand big-O
count for efficiency. you must master the bizarre concept of recursion. then you can use any language
you are forced to and really be able to use those stupid books called "learn <language> in 24 hours".
you should look at the syllabus of first semester computer science at a college and if it doesn't include
all that keep looking and figure out what topics you should practice. youtube will have tutorials for
them all.
now, the simple answer to how you can get ready for real-world applications... personally, i'm looking
at learning how to really use "unity" as a master with the many full 60-hour tutorials that are available
for free. i've learned what i called "the basics" and unity is a game design environment. it uses all of
those things and you really need one year of programming at a real university to even get anywhere.
aside from that, you could try to use use unity to make an android app with various GUI elements and
templates are easy to get and numerous. you could try to make an audio sequencer with effects-another project on my list--and that would use buffers/queues and possibly stacks and you would learn
how to incorporate microsoft libraries. finally, i recommend c#. it's microsoft's "java" on steroids. they
made it because they were sued for altering java and just rewrote it themselves and it's far more
efficient and almost identical.
http://www.quora.com/What-are-the-most-difficult-and-usefulthings-people-have-to-learn-in-their-20s