|
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?
|
# ? Jul 14, 2017 20:42 |
|
|
# ? May 5, 2024 20:46 |
|
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 |
# ? Jul 15, 2017 02:10 |
|
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.
|
# ? Jul 15, 2017 02:19 |
|
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.
|
# ? Jul 16, 2017 08:51 |
|
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!
|
# ? Jul 16, 2017 18:30 |
|
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.
|
# ? Jul 16, 2017 20:44 |
|
^^^ 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
|
# ? Jul 16, 2017 20:55 |
|
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.
|
# ? Jul 16, 2017 22:07 |
|
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.
|
# ? Jul 17, 2017 05:10 |
|
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?
|
# ? Jul 17, 2017 20:03 |
|
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. 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.
|
# ? Jul 21, 2017 16:08 |
|
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? 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 |
# ? Jul 21, 2017 19:22 |
|
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?
|
# ? Jul 21, 2017 19:45 |
|
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?
|
# ? Jul 21, 2017 19:51 |
|
|
# ? May 5, 2024 20:46 |
|
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
|
# ? Jul 21, 2017 23:31 |