First, just be reasonable in expectations. There are a billion stories about self-taught people working at big tech companies; those are unicorns. It's not the norm. In fact, the only reason why...
First, just be reasonable in expectations. There are a billion stories about self-taught people working at big tech companies; those are unicorns. It's not the norm. In fact, the only reason why SWE has become such a hotspot for these, is less regulation. There's no reason you can't self-study to become a mechanical engineer in theory either, it's just that the government won't let you call yourself an engineer unless you go to an accredited bachelors program.
Missing out the degree is a big deal. Not only will you be below degree holders in priority, but you're missing out on an entire pipeline for junior developers that many companies have built up and trust. That's where going to "prestigious" universities plays a part--it's not necessarily that they reject everyone who comes from Podunk, OH, it's that the pipeline. And also the networking.
So I'd just say first of all, expect an uphill battle. The economy is not great, just about everywhere in the world, there's honestly quite a bit of CS newgrads looking for work right now.
In terms of courses, you won't get the fancy virtual diploma at the end, but many large universities don't wall off their course material. There's nothing stopping you from going through them, lectures and all.
Speaking of that, unfortunate, but start doing leetcode. It's spread everywhere, from "prestigious" roles to random small companies. Leetcode style problems is how interviews are done, and you'd want to at least be able to do LC Med problems by yourself in under an hour.
Just be aware that LeetCode and similar sites have some issues. Their questions are often poorly written and hard to understand, and when you're doing the problems and trying to figure them out,...
Just be aware that LeetCode and similar sites have some issues. Their questions are often poorly written and hard to understand, and when you're doing the problems and trying to figure them out, you often aren't given the inputs that are failing (unless it's changed since I last tried it?). They can be fun, but they're not necessarily a realistic scenario like you'd have when writing code on the job. You can't ask questions to clarify what something means, and they often focus on performance while completely ignoring readability and maintainability, whereas in a job, the opposite is often the case.
I'm pretty sure you're talking about Hackerrank instead, but regardless neither is really for actually getting better at software engineering. Rather, it's because they're the same format as...
I'm pretty sure you're talking about Hackerrank instead, but regardless neither is really for actually getting better at software engineering. Rather, it's because they're the same format as whiteboard interviews, which use to be mainly used by major firms, but now are basically everywhere.
These days, if you want a SWE job, you'll probably have to do a leetcode style whiteboard problem.
I made a switch from publishing (was a liberal arts major) to software engineering. I was self taught, and so I can say it definitely can be done. It's hard to comment on timetables etc, there are...
Exemplary
I made a switch from publishing (was a liberal arts major) to software engineering.
I was self taught, and so I can say it definitely can be done. It's hard to comment on timetables etc, there are so many variables in play. FWIW 6 months seems a bit tight. If it's a hard deadline, then so be it and you gotta work within that constraint. Either way, after 6 months of consistent self study (or some other route like a bootcamp), you will have learned a ton and you will be that much closer to your career switch. At minimum you will have gained a very valuable and useful skill to go along with your MBA. I wouldn't discount that at all.
For me, I taught myself over the course of two years while I had a full time job. I intentionally avoided setting a deadline for myself because I wanted to avoid burning out from the pressure of meeting that deadline. This of course is a luxury i had, since I had a good low stress job and could afford to take my time. But I would emphasize that if you genuinely enjoy programming, you will find yourself propelled much further and more easily when you are self teaching if you are learning material, building projects, reading for learnings sake (ie, not with the explicitly conscious intention of learning X for your resume). When self teaching, I found that things worked better for me if I focused more on the enjoyable pursuit of learning software as a hobby, and that if I followed this approach, one day I would wake up and know enough to get a job. When I found myself in a stretch where I was learning or doing something purely for the resume, I got much more fatigued.
FWIW, I did about 1.5 years of python and then 6 months of Ruby (some sql and JavaScript thrown in there too). I got a job at a rails shop (Ruby), though i do some python too. My advice is always to follow your interests, though, so not making an arg for those languages over some of the others you mentioned (eg c++).
As for learning fundamentals vs projects etc, i think this is a common but unhelpful framing. Programming is all about learning a variety of tools and putting them to use. You don't need to be a seamstress to sew a button on a shirt. In my former life, I was a copyeditor and I noticed that a frequent mistake folks would make would be to accidentally duplicate some word -- "I went to the the store". So one of my first projects was called "check4repeats" that scanned a text file for duplicate words. I also made a command line hangman game. These projects were bad! But getting into the habit of "okay I learned a few new things (tools), what small thing could I make to give them a spin?" will break you out of the tutorial, tutorial, tutorial cycle and allow you to learn to figure stuff out with fewer guardrails. It will also help you find your way to tools and concepts you didn't know you need to know ("ok how do I make this button do X? How do I store the users score in a database?")
Wrt bootcamps, I should mention, I've worked with bootcampers as well, and my company recently participated in a bootcamp show/tell, where every candidate there got hired. So from my perspective (probably depending on the bootcamp) bootcamps are absolutely a viable route. Obviously in most cases you have to put down money, can't keep a job, the time/day commitment is much greater than it might be if you're self taught. But they seem to work for many people. A lot of it probably comes down to style -- do you prefer structured guidance, a la a classroom vs unstructured self pursuit.
Finally, I should mention: You have an MBA, that should help you out. I was in publishing and got a job as a SWE at a publisher. Professional SWE is all about leveraging your programming skills and knowledge to solve business (or other kinds of) problems. So don't neglect that angle or think that your previous experience is not applicable.
I'm a film major trying to break into computer science. I have this advice: do not cut ties with the industry before you have something at least remotely concrete on the horizon. make the best...
I'm a film major trying to break into computer science. I have this advice:
do not cut ties with the industry before you have something at least remotely concrete on the horizon.
make the best time estimative you possibly can, and then double it. Better yet, triple it.
don't take notes for things that are Googleable. Don't waste your time maintaining useless notes.
don't use Vim or Emacs, they'll spoil you for life. On another note, do use Vim or Emacs.
I do not. The second part of the list item was kind of a joke. There are many advantages in using editors that were created a long time ago but remain current, useful, and relevant (small rant)....
I do not. The second part of the list item was kind of a joke. There are many advantages in using editors that were created a long time ago but remain current, useful, and relevant (small rant). But I won’t lead anyone down that path, the benefits are minimal unless you have certain needs and predispositions.
I mean VSCode doesn't fulfill all niches. Oftentimes it's way too unwieldy to use, and just a terminal text editor is worth learning for when you need to make quick edits, or to very large log...
I mean VSCode doesn't fulfill all niches. Oftentimes it's way too unwieldy to use, and just a terminal text editor is worth learning for when you need to make quick edits, or to very large log files.
Not only that, but Vim and to a lesser extent Emacs are more than just text editors, they're modes of control for editing. For instance, I use vim keybindings in VSCode, and vim keybindings are also in most common IDEs at this point.
Yeah, a lot of people seem to like vi key bindings enough to make them work in other editors, which seems like a point in favor of learning them. I only know enough vi to make a quick edit and...
Yeah, a lot of people seem to like vi key bindings enough to make them work in other editors, which seems like a point in favor of learning them. I only know enough vi to make a quick edit and quit, but that's useful to know.
For work, the project I'm on uses a (mostly) Scala backend and a (mostly) React frontend. I use VS Code for the React, and Intellij for Scala. I don't think it's possible to use a java-based...
For work, the project I'm on uses a (mostly) Scala backend and a (mostly) React frontend. I use VS Code for the React, and Intellij for Scala. I don't think it's possible to use a java-based language without an IDE and remain sane. In years past, I've used a relatively bare-bones vim setup to write PHP, Perl, Go, and Node.js.
I still use vim for quick edits and miscellaneous text. Just need to update a config value? I can open, edit, and save with vim faster than the splash screen loading up Intellij. Fiddling with an SQL query while looking at psql output and maybe some other system command outputs? vim is sufficient and lets me keep it in a terminal split-pane with the rest.
If nothing else, one should be at least familiar with the basics of vi(m) even if it's not their daily-driver because it's practically everywhere. If you have to ssh to a remote server to edit a file, a fancier editor may have a remote option somewhere, but vim's probably there. If you have to use someone else's machine and they don't have your editor of choice installed, vim's probably there (unless they're developing on windows, but, really, who does that?).
You seem pretty smart and motivated, so I think you could get enough experience in before December to get a job in software engineering, likely an internship (although software engineering...
You seem pretty smart and motivated, so I think you could get enough experience in before December to get a job in software engineering, likely an internship (although software engineering internships often pay as well or better than normal entry level positions for other fields).
In my only partial-qualified opinion, bootcamps and the general idea that people can go from 0 to junior software engineer in just a few months is delusional. There's a reason people spend 4+ years in college learning both computer science principles and software engineering skills. If bootcamps did even 75% of a college education no one in SWE would waste their money on college.
That all said - smart students with only 6 months of programming experience will easily land internship positions. If you're okay spending 12-18 months as an intern you could make your way to a junior developer position 2 years from now.
If you have time you should read books on software engineering in addition to programming. The Pragmatic Programmer is one I highly recommend. Clean Code is one I haven't read but have heard many good things about. But I wouldn't worry about these kinds of books until you have some experience programming - else you may have no experiences to relate the advice to.
I'd just note that the take above is imo waaay too optimistic re: internships. Not only are many of them explicitly only for bachelors students, but a lot of them were canceled. Here's a long ass...
I'd just note that the take above is imo waaay too optimistic re: internships. Not only are many of them explicitly only for bachelors students, but a lot of them were canceled.
If bootcamps were 2 year programs then I agree they'd be comparable to the CS/SE education you can get from an undergrad education. If you put anything up on GitHub feel free to send it my way and...
Many undergrad degrees also have a general education component that takes roughly 2 years to complete.
If bootcamps were 2 year programs then I agree they'd be comparable to the CS/SE education you can get from an undergrad education.
If you put anything up on GitHub feel free to send it my way and I'll give you a full code review (unless it's in some super esoteric language).
Another way you could transition into software is through product management. I'm biased because it's my field, but is viable as a recent MBA grad. You'll be able to leverage your degree into a...
Another way you could transition into software is through product management. I'm biased because it's my field, but is viable as a recent MBA grad. You'll be able to leverage your degree into a position where you work closely with developers. You'll find opportunities to write software to help the team. Then you can figure out where to go after that.
Regarding this - I highly recommend the Stack Overflow Code Review site. You can get some really decent feedback on your projects there. Just be sure to read over the requirements for posting...
doing code reviews with someone else.
Regarding this - I highly recommend the Stack Overflow Code Review site. You can get some really decent feedback on your projects there. Just be sure to read over the requirements for posting there, as they're a little non-obvious.
To elaborate on what @radiator said - I work on the software side of film and video editing and motion graphics. If you are interested in that area I would be happy to share my experiences in the...
To elaborate on what @radiator said - I work on the software side of film and video editing and motion graphics. If you are interested in that area I would be happy to share my experiences in the field. I've done work with both Adobe and Apple on most of their film/video products, and sold my own plug-ins for them for quite a while in the past.
I'm not familiar with those products. Do you have a link? Their names are so generic that it brings up a bunch of unrelated things when I search for it. But in general, there are a number of types...
I'm not familiar with those products. Do you have a link? Their names are so generic that it brings up a bunch of unrelated things when I search for it.
But in general, there are a number of types of plug-ins available for most video editing software. I mainly deal with image processing plugins. These include things like color correction and color styling like you probably did as a colorist. They can also be distortions, blurs, glows, compositing/keying, format conversion, etc. There are also plug-ins that render 2D or 3D stuff from scratch.
In addition to image processing there are workflow plug-ins and apps. These generally process video editing project data, such as edit decision lists (EDL), color decision lists (CDL), or XML projects from the apps you use. They have a variety of uses, but are generally used to make the mundane parts of editing easier. (This is in the category of "automate the boring stuff" mentioned above. See for example Producer's Best Friend.)
No big deal if it doesn't interest you, but if you have any questions about it, feel free to ask.
I would be wary of boot camps but even more wary of spending a lot of money on school tuition and ending up with a lot of student loans for a substandard education, and there's a lot of risk of...
I would be wary of boot camps but even more wary of spending a lot of money on school tuition and ending up with a lot of student loans for a substandard education, and there's a lot of risk of that due to coronavirus. All the traditional schools are figuring it out as they go and I think a lot of students will be unhappy with the results.
It seems like a good time to give inexpensive remote learning a try? There might be a bootcamp that is already remote-only (so they've worked out the bugs) and is also good? Also, the companies hiring people out of bootcamp would likely have somewhat lower expectations at first, expecting you to learn more on the job.
Unfortunately I don't know what to recommend. I'd look at Lambda School since they are online-only, but they got some bad press and you should probably read that first.
I don't think of getting a job without a computer science degree as being a "unicorn" thing since I've worked with people who had other degrees. Some people get in sideways through a job in QA or support, and then end up programming.
By the way, if you're looking for an interesting project to try, how about fixing some minor bug you care about in Tildes? This will give you a taste of how programming works when you're working...
By the way, if you're looking for an interesting project to try, how about fixing some minor bug you care about in Tildes? This will give you a taste of how programming works when you're working on real software, starting with how to get it running locally and understanding the code.
(I do feel guilty about not contributing patches to Tildes myself. In my retirement it seems I've gotten lazy about programming.)
IMO you contribute in plenty of other valuable ways, @skybrian, e.g. all your submissions + usually well reasoned and/or informational comments... so you don't really need to feel guilty about not...
IMO you contribute in plenty of other valuable ways, @skybrian, e.g. all your submissions + usually well reasoned and/or informational comments... so you don't really need to feel guilty about not contributing code as well. :)
First, just be reasonable in expectations. There are a billion stories about self-taught people working at big tech companies; those are unicorns. It's not the norm. In fact, the only reason why SWE has become such a hotspot for these, is less regulation. There's no reason you can't self-study to become a mechanical engineer in theory either, it's just that the government won't let you call yourself an engineer unless you go to an accredited bachelors program.
Missing out the degree is a big deal. Not only will you be below degree holders in priority, but you're missing out on an entire pipeline for junior developers that many companies have built up and trust. That's where going to "prestigious" universities plays a part--it's not necessarily that they reject everyone who comes from Podunk, OH, it's that the pipeline. And also the networking.
So I'd just say first of all, expect an uphill battle. The economy is not great, just about everywhere in the world, there's honestly quite a bit of CS newgrads looking for work right now.
In terms of courses, you won't get the fancy virtual diploma at the end, but many large universities don't wall off their course material. There's nothing stopping you from going through them, lectures and all.
Here's Berkeley's intro course, data structures for instance. I would also consider Algorithms since it's critical for interviews
Maybe test yourself with an old exam
Speaking of that, unfortunate, but start doing leetcode. It's spread everywhere, from "prestigious" roles to random small companies. Leetcode style problems is how interviews are done, and you'd want to at least be able to do LC Med problems by yourself in under an hour.
Just be aware that LeetCode and similar sites have some issues. Their questions are often poorly written and hard to understand, and when you're doing the problems and trying to figure them out, you often aren't given the inputs that are failing (unless it's changed since I last tried it?). They can be fun, but they're not necessarily a realistic scenario like you'd have when writing code on the job. You can't ask questions to clarify what something means, and they often focus on performance while completely ignoring readability and maintainability, whereas in a job, the opposite is often the case.
I'm pretty sure you're talking about Hackerrank instead, but regardless neither is really for actually getting better at software engineering. Rather, it's because they're the same format as whiteboard interviews, which use to be mainly used by major firms, but now are basically everywhere.
These days, if you want a SWE job, you'll probably have to do a leetcode style whiteboard problem.
I made a switch from publishing (was a liberal arts major) to software engineering.
I was self taught, and so I can say it definitely can be done. It's hard to comment on timetables etc, there are so many variables in play. FWIW 6 months seems a bit tight. If it's a hard deadline, then so be it and you gotta work within that constraint. Either way, after 6 months of consistent self study (or some other route like a bootcamp), you will have learned a ton and you will be that much closer to your career switch. At minimum you will have gained a very valuable and useful skill to go along with your MBA. I wouldn't discount that at all.
For me, I taught myself over the course of two years while I had a full time job. I intentionally avoided setting a deadline for myself because I wanted to avoid burning out from the pressure of meeting that deadline. This of course is a luxury i had, since I had a good low stress job and could afford to take my time. But I would emphasize that if you genuinely enjoy programming, you will find yourself propelled much further and more easily when you are self teaching if you are learning material, building projects, reading for learnings sake (ie, not with the explicitly conscious intention of learning X for your resume). When self teaching, I found that things worked better for me if I focused more on the enjoyable pursuit of learning software as a hobby, and that if I followed this approach, one day I would wake up and know enough to get a job. When I found myself in a stretch where I was learning or doing something purely for the resume, I got much more fatigued.
FWIW, I did about 1.5 years of python and then 6 months of Ruby (some sql and JavaScript thrown in there too). I got a job at a rails shop (Ruby), though i do some python too. My advice is always to follow your interests, though, so not making an arg for those languages over some of the others you mentioned (eg c++).
As for learning fundamentals vs projects etc, i think this is a common but unhelpful framing. Programming is all about learning a variety of tools and putting them to use. You don't need to be a seamstress to sew a button on a shirt. In my former life, I was a copyeditor and I noticed that a frequent mistake folks would make would be to accidentally duplicate some word -- "I went to the the store". So one of my first projects was called "check4repeats" that scanned a text file for duplicate words. I also made a command line hangman game. These projects were bad! But getting into the habit of "okay I learned a few new things (tools), what small thing could I make to give them a spin?" will break you out of the tutorial, tutorial, tutorial cycle and allow you to learn to figure stuff out with fewer guardrails. It will also help you find your way to tools and concepts you didn't know you need to know ("ok how do I make this button do X? How do I store the users score in a database?")
Wrt bootcamps, I should mention, I've worked with bootcampers as well, and my company recently participated in a bootcamp show/tell, where every candidate there got hired. So from my perspective (probably depending on the bootcamp) bootcamps are absolutely a viable route. Obviously in most cases you have to put down money, can't keep a job, the time/day commitment is much greater than it might be if you're self taught. But they seem to work for many people. A lot of it probably comes down to style -- do you prefer structured guidance, a la a classroom vs unstructured self pursuit.
Finally, I should mention: You have an MBA, that should help you out. I was in publishing and got a job as a SWE at a publisher. Professional SWE is all about leveraging your programming skills and knowledge to solve business (or other kinds of) problems. So don't neglect that angle or think that your previous experience is not applicable.
Inventory management app sounds like a great project!
I'm a film major trying to break into computer science. I have this advice:
These days it seems like VS Code is becoming more and more popular. Why do you recommend the older editors to beginners?
I do not. The second part of the list item was kind of a joke. There are many advantages in using editors that were created a long time ago but remain current, useful, and relevant (small rant). But I won’t lead anyone down that path, the benefits are minimal unless you have certain needs and predispositions.
I mean VSCode doesn't fulfill all niches. Oftentimes it's way too unwieldy to use, and just a terminal text editor is worth learning for when you need to make quick edits, or to very large log files.
Not only that, but Vim and to a lesser extent Emacs are more than just text editors, they're modes of control for editing. For instance, I use vim keybindings in VSCode, and vim keybindings are also in most common IDEs at this point.
Yeah, a lot of people seem to like vi key bindings enough to make them work in other editors, which seems like a point in favor of learning them. I only know enough vi to make a quick edit and quit, but that's useful to know.
For work, the project I'm on uses a (mostly) Scala backend and a (mostly) React frontend. I use VS Code for the React, and Intellij for Scala. I don't think it's possible to use a java-based language without an IDE and remain sane. In years past, I've used a relatively bare-bones vim setup to write PHP, Perl, Go, and Node.js.
I still use vim for quick edits and miscellaneous text. Just need to update a config value? I can open, edit, and save with vim faster than the splash screen loading up Intellij. Fiddling with an SQL query while looking at
psql
output and maybe some other system command outputs?vim
is sufficient and lets me keep it in a terminal split-pane with the rest.If nothing else, one should be at least familiar with the basics of
vi(m)
even if it's not their daily-driver because it's practically everywhere. If you have to ssh to a remote server to edit a file, a fancier editor may have a remote option somewhere, but vim's probably there. If you have to use someone else's machine and they don't have your editor of choice installed, vim's probably there (unless they're developing on windows, but, really, who does that?).You seem pretty smart and motivated, so I think you could get enough experience in before December to get a job in software engineering, likely an internship (although software engineering internships often pay as well or better than normal entry level positions for other fields).
In my only partial-qualified opinion, bootcamps and the general idea that people can go from 0 to junior software engineer in just a few months is delusional. There's a reason people spend 4+ years in college learning both computer science principles and software engineering skills. If bootcamps did even 75% of a college education no one in SWE would waste their money on college.
That all said - smart students with only 6 months of programming experience will easily land internship positions. If you're okay spending 12-18 months as an intern you could make your way to a junior developer position 2 years from now.
If you have time you should read books on software engineering in addition to programming. The Pragmatic Programmer is one I highly recommend. Clean Code is one I haven't read but have heard many good things about. But I wouldn't worry about these kinds of books until you have some experience programming - else you may have no experiences to relate the advice to.
I'd just note that the take above is imo waaay too optimistic re: internships. Not only are many of them explicitly only for bachelors students, but a lot of them were canceled.
Here's a long ass list: https://github.com/gcreddy42/hiring2020#covid-19-summer-2020-internship-status-list
Ah, I’d totally not considered the state of internships in the pandemic world.
If bootcamps were 2 year programs then I agree they'd be comparable to the CS/SE education you can get from an undergrad education.
If you put anything up on GitHub feel free to send it my way and I'll give you a full code review (unless it's in some super esoteric language).
Another way you could transition into software is through product management. I'm biased because it's my field, but is viable as a recent MBA grad. You'll be able to leverage your degree into a position where you work closely with developers. You'll find opportunities to write software to help the team. Then you can figure out where to go after that.
My favorite thought leader in product management published this the other day. If you want to know more, let me know.
https://svpg.com/product-management-start-here/
Regarding this - I highly recommend the Stack Overflow Code Review site. You can get some really decent feedback on your projects there. Just be sure to read over the requirements for posting there, as they're a little non-obvious.
To elaborate on what @radiator said - I work on the software side of film and video editing and motion graphics. If you are interested in that area I would be happy to share my experiences in the field. I've done work with both Adobe and Apple on most of their film/video products, and sold my own plug-ins for them for quite a while in the past.
I'm not familiar with those products. Do you have a link? Their names are so generic that it brings up a bunch of unrelated things when I search for it.
But in general, there are a number of types of plug-ins available for most video editing software. I mainly deal with image processing plugins. These include things like color correction and color styling like you probably did as a colorist. They can also be distortions, blurs, glows, compositing/keying, format conversion, etc. There are also plug-ins that render 2D or 3D stuff from scratch.
In addition to image processing there are workflow plug-ins and apps. These generally process video editing project data, such as edit decision lists (EDL), color decision lists (CDL), or XML projects from the apps you use. They have a variety of uses, but are generally used to make the mundane parts of editing easier. (This is in the category of "automate the boring stuff" mentioned above. See for example Producer's Best Friend.)
No big deal if it doesn't interest you, but if you have any questions about it, feel free to ask.
Ah, neat. Yeah, those are definitely the sorts of things I'm talking about. Very cool!
I would be wary of boot camps but even more wary of spending a lot of money on school tuition and ending up with a lot of student loans for a substandard education, and there's a lot of risk of that due to coronavirus. All the traditional schools are figuring it out as they go and I think a lot of students will be unhappy with the results.
It seems like a good time to give inexpensive remote learning a try? There might be a bootcamp that is already remote-only (so they've worked out the bugs) and is also good? Also, the companies hiring people out of bootcamp would likely have somewhat lower expectations at first, expecting you to learn more on the job.
Unfortunately I don't know what to recommend. I'd look at Lambda School since they are online-only, but they got some bad press and you should probably read that first.
I don't think of getting a job without a computer science degree as being a "unicorn" thing since I've worked with people who had other degrees. Some people get in sideways through a job in QA or support, and then end up programming.
Yeah, that does seem like a good deal.
By the way, if you're looking for an interesting project to try, how about fixing some minor bug you care about in Tildes? This will give you a taste of how programming works when you're working on real software, starting with how to get it running locally and understanding the code.
(I do feel guilty about not contributing patches to Tildes myself. In my retirement it seems I've gotten lazy about programming.)
IMO you contribute in plenty of other valuable ways, @skybrian, e.g. all your submissions + usually well reasoned and/or informational comments... so you don't really need to feel guilty about not contributing code as well. :)
Oh I know. Thanks!