Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
MOVIE MAJICK
Jan 4, 2012

by Pragmatica
I'd appreciate any insights or experience you guys have getting into this industry without formal coding focused education.

Also wondering what any you people in this industry think of my specific situation. I'm a PhD student in Philosophy. My research focus is on modelling in science and my dissertation will be focused on computational/quantum chemistry. I have a strong background in theoretical computer science (specifically computational complexity), nothing 'official' though, just as a topic I've written papers on. Most of my coursework has been in philosophy. Formal logic is also a strong suit of mine, taught several courses on this topic. Software development has been something I've been eyeing as a backup plan to academia. Coding has always come really easy to me. I pick up computer languages quickly and it's also something I've enjoyed in the past. I have three years left in my program. What sort of things can I do to make myself hireable?

Adbot
ADBOT LOVES YOU

lobster22221
Jul 11, 2017
Have you put together a portfolio of what you've done? Showing that you can actually code useful things is a positive for employers. Even a small collection of personal projects is better than nothing.

lobster22221 fucked around with this message at 02:12 on Jul 15, 2017

boner confessor
Apr 25, 2013

by R. Guyovich
build a portfolio of things you've developed in your spare time for fun, or to support your research in other areas. contribute to open source projects to show you can work in a team. credentials aren't nearly as important as showing your code and explaining how it works and what problem it solves. it doesn't even have to be business related, just, here's a silly game i made, this tells you when you're about to run out of milk and eggs etc.

Lima
Jun 17, 2012

Do what the others have said but also don't downplay your philosophy and logic training. Show how those will make you a better programmer/designer/employee as well.

Jecht
Jul 30, 2006
Firstly, let's dispel a few things. Learning the syntax of a programming language is not programming -- programming is converting a solution to some problem into code. Read a book on data structures and algorithms, and implement each one. Preferably in a statically typed, compiled language. Then, begin building a portfolio. Build some programs that could help with your current degree program. Create data models and publish them online. Solve HackerRank problems. Professional software development is not a "fall back" career -- done right, it's a rigorous engineering discipline just like many others.

To be a good software engineer, you'll need to understand computer architecture and what is actually happening on the computer when your code is being ran. Learn about Linux and how to deploy web servers of any type. Deploy a PHP application. Deploy a Ruby on Rails application. Deploy a Node.js application. Learn about networking protocols. Determine which type of development you want to specialize in, even though you'll probably need to be familiar with them all anyway. Front end (HTML/CSS/Javascript), back end (you'll usually start with PHP, Javascript, Python, Ruby, etc; doesn't matter), and databases (some SQL dialect). And above and beyond all else, be prepared to feel dumb everyday. I'm a professional software developer, and if I'm solving interesting problems, I'm stumped several times each day. This is part of the life. Good luck!

fantastic in plastic
Jun 15, 2007

The Socialist Workers Party's newspaper proved to be a tough sell to downtown businessmen.

MOVIE MAJICK posted:

What sort of things can I do to make myself hireable?

Leave your PhD program, or if you go through with it, omit it from your resume when you're looking for your first job. People will see that you have a PhD and think you're overqualified for entry-level development. (In practice, this sounds like the manager saying "he'll be bored in a month".)

In terms of what practical skills you should learn, Jecht's post is good.

Jecht
Jul 30, 2006
^^^ Going to have to echo the post by fantastic in plastic regarding leaving your PhD off your resume. Younger hiring managers/interviewers may be intimidated by your experience, and it could hold you back.


Aaaand I just found the notes my recruiter sent me regarding what to know for the Google interview process. I didn't get that particular job, but if you know all of the below points and can effectively solve problems from all of these categories, entry and mid-level development interviews should be cake:


- Algorithm complexity (computational complexity, i.e. "Big O")
- System design (distributed, parallel computing)
- Sorting (merge sort, quick sort)
- Hash tables
- Implement using only arrays
- Trees
- Construction, traversal, manipulation algorithms
- Binary, n-ary, trie-tries. Balanced binary tree (red/black, splay, AVL)
- Traversal: BFS, DFS. Difference between inorder, postorder, preorder
- Graphs
- Represent a graph in memory (objects/pointers, matrix, adjacency list)
- Learn each representation and their pros/cons
- Traversal: BFS, DFS. Complexity, tradeoffs, how to implement
- Dijkstra, A*
- Others
- Other data structures/algorithms (heaps, etc)
- NP-complete algorithms (traveling salesman, knapsack), recognize when asked in disguise
- Basic discrete math
- Combinatorics, probability
- n choose k, etc
- Operating systems
- Processes, threads, concurrency issues
- Locks and mutexes and semaphores and monitors, and how they work
- Deadlock, livelock, how to avoid them
- Know what resources a process needs, a thread needs, how context switching works, how it’s initiated by the OS and the underlying hardware.
- Scheduling
- Fundamentals of “modern” concurrency constructs

Jeb Bush 2012
Apr 4, 2007

A mathematician, like a painter or poet, is a maker of patterns. If his patterns are more permanent than theirs, it is because they are made with ideas.

fantastic in plastic posted:

Leave your PhD program, or if you go through with it, omit it from your resume when you're looking for your first job. People will see that you have a PhD and think you're overqualified for entry-level development. (In practice, this sounds like the manager saying "he'll be bored in a month".)

It's pretty common for people with non-CS PhDs to go into software engineering and other tech jobs (mostly maths & science but philosophy of science doesn't seem crazy far off), so I imagine this depends on whether you're applying to a place that's used to hiring PhDs.

Jecht posted:

Aaaand I just found the notes my recruiter sent me regarding what to know for the Google interview process. I didn't get that particular job, but if you know all of the below points and can effectively solve problems from all of these categories, entry and mid-level development interviews should be cake:

I think Google is at the far end of the spectrum in terms of how much they value formal CS education, although those are all worthwhile things to know.

VextheGrey
Dec 3, 2000

"No, Sasquatch! NOOOOO!!"

MOVIE MAJICK posted:

theoretical computer science

is, for the overwhelming majority of software development jobs a useless bit of trivia. As are most of the computational parlor tricks people are required to memorize in order to pass various interviews, Google notwithstanding.

That actually isn't meant to discourage you. The science of computation and the artifice of software development are related at best. I've been doing this for 10+ years and I'd say I've met an even split of people who had formal CS education vs. literally anything else.

MOVIE MAJICK
Jan 4, 2012

by Pragmatica
Thanks for the advice guys. Looks like an overwhelming consensus is to develop a portfolio on the side. I am not dropping out of my program however. I love what I do :) :)

Also curious if anyone reading this has worked on things like medical databases and had to deal with problems of formal ontology and granularity?

SSH IT ZOMBIE
Apr 19, 2003
No more blinkies! Yay!
College Slice

Jecht posted:

^^^ Going to have to echo the post by fantastic in plastic regarding leaving your PhD off your resume. Younger hiring managers/interviewers may be intimidated by your experience, and it could hold you back.


Aaaand I just found the notes my recruiter sent me regarding what to know for the Google interview process. I didn't get that particular job, but if you know all of the below points and can effectively solve problems from all of these categories, entry and mid-level development interviews should be cake:


- Algorithm complexity (computational complexity, i.e. "Big O")
- System design (distributed, parallel computing)
- Sorting (merge sort, quick sort)
- Hash tables
- Implement using only arrays
- Trees
- Construction, traversal, manipulation algorithms
- Binary, n-ary, trie-tries. Balanced binary tree (red/black, splay, AVL)
- Traversal: BFS, DFS. Difference between inorder, postorder, preorder
- Graphs
- Represent a graph in memory (objects/pointers, matrix, adjacency list)
- Learn each representation and their pros/cons
- Traversal: BFS, DFS. Complexity, tradeoffs, how to implement
- Dijkstra, A*
- Others
- Other data structures/algorithms (heaps, etc)
- NP-complete algorithms (traveling salesman, knapsack), recognize when asked in disguise
- Basic discrete math
- Combinatorics, probability
- n choose k, etc
- Operating systems
- Processes, threads, concurrency issues
- Locks and mutexes and semaphores and monitors, and how they work
- Deadlock, livelock, how to avoid them
- Know what resources a process needs, a thread needs, how context switching works, how it’s initiated by the OS and the underlying hardware.
- Scheduling
- Fundamentals of “modern” concurrency constructs

Just out of curiosity - does underlying knowledge of stuff like this help on a day to day basis, or is it just to nail an interview?
Like - merge sorting, hash tables, most languages provide standard data types that do this, or, like, you might override a container class and implement a function that compares values. The underlying logic and math is hidden and you just assume the language devs know what they are doing.

My official title isn't programmer, but I do end up cutting a good amount of code. Ever now and then I float the idea of going to one of those coder cram classes to pick up the background knowledge. Mutexes, locks, deadlocks, etc are higher level than some of the algorithmic things you listed.

twodot
Aug 7, 2005

You are objectively correct that this person is dumb and has said dumb things

SSH IT ZOMBIE posted:

Just out of curiosity - does underlying knowledge of stuff like this help on a day to day basis, or is it just to nail an interview?
Like - merge sorting, hash tables, most languages provide standard data types that do this, or, like, you might override a container class and implement a function that compares values. The underlying logic and math is hidden and you just assume the language devs know what they are doing.
Depends on what you're working on. If you're working on anything where performance matters, then knowing how sorts and hash tables work (and most everything else) is important to using them in efficient ways. If all you need is a sorted list or a functional hash table, then you can shove any old data in their without knowing how they work, and if Angry Birds launches .2 seconds slower as a result, maybe no one cares. The one thing that annoys me is that everyone says to know heaps for interviews, but I don't think I've ever seen one actually used in a production environment.
edit:
To clarify, there's no reason anyone should be able to write an implementation for quicksort off the top of their head, but knowing how it works generally and what sort of inputs are good or bad for it matters in a lot of cases.

twodot fucked around with this message at 19:24 on Jul 21, 2017

Jeb Bush 2012
Apr 4, 2007

A mathematician, like a painter or poet, is a maker of patterns. If his patterns are more permanent than theirs, it is because they are made with ideas.

twodot posted:

The one thing that annoys me is that everyone says to know heaps for interviews, but I don't think I've ever seen one actually used in a production environment.

are you saying you've never seen the usecase for heaps, or that you've seen it but people have used something else?

twodot
Aug 7, 2005

You are objectively correct that this person is dumb and has said dumb things

Jeb Bush 2012 posted:

are you saying you've never seen the usecase for heaps, or that you've seen it but people have used something else?
As an example, I've seen places where priority queues are useful, but never anyone, in a production environment, who bothered to implement a priority queue as a heap.

Adbot
ADBOT LOVES YOU

Jeb Bush 2012
Apr 4, 2007

A mathematician, like a painter or poet, is a maker of patterns. If his patterns are more permanent than theirs, it is because they are made with ideas.

twodot posted:

As an example, I've seen places where priority queues are useful, but never anyone, in a production environment, who bothered to implement a priority queue as a heap.

uh yeah you would use a library implementation, not implement it yourself, just like with sorting algorithms and hash tables &c. I can't speak for every language, but java and C++ both implement their standard library priority queue classes as binary heaps

  • Locked thread