I’m all for self-studying, including going through an entire college curriculum on your own, in less time than a traditional four-year program.
based on several schools (Yale, Harvard, MIT, Johns Hopkins, University of Pennsylvania, and Oxford University) I have created a two-year study curriculum in neuroscience, using open-courseware.
- Principles of Neuroscience
- Animal behavior
- Neurobiology of behavior
- Structure and functional organization of the human nervous system
- Synaptic organization of the nervous system
- Brain development and plasticity
- Bioethics in neuroscience
- Experimental methods in neuroscience
- Research stats
- Cell and molecular neuroscience
- Molecular transport
- Neurobiology of learning and memory
- Circadian neurobiology
- Perception and decision
- Motor control
- Autonomic physiology
- Molecular genetics
- Evolutionary neurobiology
- Systems neuroscience
- Intro to computing
- Fundamentals of computational neuroscience
- Cognitive neuroscience
- Neurobiology of emotion
- Functional brain imaging
- Neuroscience of visual perception
- Smell and taste
- Auditory system
- Drugs and the brain
- Biological bases of addiction
- Behavioral pharmacology
- Brain injury and recovery
- Neurodegenerative disorders
- Neurobiology of neuropsychiatric disorders
- Genes, circuits, and behavior
This is my first code:
Every once in a while, I look up the skills that self-taught programmers lack, as compared to their formally educated peers. I think this is important to keep in mind, not just in terms of jargon, but also in how you approach problems. There could be solutions available for your programming problems that you aren’t even aware of, because you just don’t know the industry as intimately as someone with a college degree might.
This isn’t to say that self-taught programmers are inferior; I’m biased because I’m on the path to becoming one, but I do think having the dedication, drive, and intelligence to teach yourself programming and computer science confers just as much credibility as someone with a brick-and-mortar education has.
As I learn more, this post will be updated.
- Learning how to program in a specific programming language is worthwhile, so long as you not get lost in the details of that programming language and forget to learn skills like parsing, optimization, lexing, type systems, etc.
- A big area that self-taught programmers lack understanding in are algorithms and data structures, including elements like sorting, recursive algorithms, and compilers.
- Systems architecture is another gap area, including understanding kernel and its abstractions.
- Understanding programming language standard libraries, e.g. Python or Java.
- Communication: you don’t work/live in a social vacuum. Long-dead are the days when a programmer could be socially awkward and sitting in a dark corner of the office. You must be able to deal with others effectively and communicate well in both spoken and written form.
- Writing: just because you spend all day writing code doesn’t mean you’re just as good at writing words. Brush up on your skills; don’t expect the tech writers (which I’m one now) to do the heavy-duty writing for you. It’s your job, as the “expert” of your project to be able to describe well the components, etc. to another person.
- Learn about design patterns. You can get a code written by chopping at it like Michelangelo did with David, but understanding the fundamentals will help you write cleaner and better code. don’t breeze through foundational elements.
- Learn to debug well.
- “Having a firm understanding of computer science and programming logic allows one to adopt to new languages quicker—something crucial in the rapidly-changing tech world,” says Daniel Gigante, founder of Crowdshare.
- Frighteningly to me:Tim Segraves, co-founder of Revaluate, thinks that formally-educated programmers tend to have the ability to learn new languages more easily.“When hiring I give more weight to candidates with degrees due to that ability to learn new things. You never know when your company will be adding a new technology,” Segraves says.
- Self-taught programmers don’t always know what they don’t know.
- Understanding the difference between code and clean code.
In scouring the Internet for tips on becoming a self-taught software engineer, I come across little jewels of wisdom. I’ll be sharing them with you:
- Start a GitHub account. Put your code up and have others review, as well as take the time to review others’ code. I liken this to writing and learning to write: You have to have your own work critiqued, and you have to critique others’ work to develop your own skills.
- Start a Bitbucket account.
- Try a Hack-a-Thon.
- Get a few freelance jobs.
- Try finding a programming internship, even if it’s for free.
- Volunteer your skills to keep developing them and to build your portfolio.
- Build your portfolio: have a place, like a website, where you post links to your projects, even if they link to your GitHub account.
- Find a Meetup, especially for those who are new to programming, and go and learn. Very importantly, network.
- Network! and I don’t mean it in the CS sense, but in the social sense.
- Don’t work in isolation.
- You’re never too old to switch careers (reassuring to me because I feel at 25, my life is half-over).
As I go through blogs, forums, and other sites, looking for insight into how to become a self-taught programmer, I’ll post quotes and their site links here:
Self-taugh[t] programmers should learn how to learn and read good blogs, such as coding horror or blogs by top tech companies such as Netflix, Twitter or Facebook. So they will learn concepts and how to solve problems.