CS things are important too!
November 12, 2016 8:55 AM   Subscribe

How can I make sure to learn a strong foundation of computer science principles while pursuing a masters focusing more on scripting and data analysis?

I'm three months into a master of Information program and loving things so far. And after studying a little Python and working in a library-based data visualization lab for some of that time, I'm finding that I absolutely love programming, especially finding creative ways to solve problems and approach data (I just helped make a web crawler that translates page data into programmatic music with SuperCollider and it was SO FUN), work with APIs, and understand more about the code itself. I think I want to work towards the role of application developer or full-stack engineer rather than data analysis (which I ultimately find less compelling) -- dreams jobs would be an application developer at the Cornell Lab of Ornithology or NPR, the MBTA is hiring a software dev..

My main concern right now is that my program is set up more to facilitate scripting and data analysis rather than development. I would love to finish the program ready to apply to some of these dev positions, but I feel like there's a chance these scripting and research heavy courses won't fully prepare me for that, especially w/r/t algorithms, good object oriented practices, etc. I expect that as a developer my weak point will be staying organized and using good formatting (because that's how I tend to be as a human) so I want to really drill in those fundamentals now.

Would you have any suggestions about the best use of my non-class time over the next 18 months to work towards this goal? Read a particular series of books? Contribute to open source code or documentation? Take a MOOC?

Meanwhile, I'll be taking classes in Database Application Design, NLP, Information Retrieval, stuff like that! And also I can take some more UX oriented classes, GIS classes, and more visual classes.

(Also, if there's another type of path forward other than application developer that hits the middle ground I'm describing above well, I'm open to learning more about it.)

Thank you!!
posted by elephantsvanish to Technology (8 answers total) 11 users marked this as a favorite
I'll get the obvious question out of the way, which is: if you're more interested in being a software developer, why aren't you considering switching to a CS program?
posted by Special Agent Dale Cooper at 9:14 AM on November 12, 2016

Hmm, is software carpentry something closer to what you're looking for?
posted by Wild_Eep at 9:25 AM on November 12, 2016 [1 favorite]

Response by poster: Special Agent Dale Cooper: Haha it's a totally reasonable question. I was accepted with a generous full ride + stipend scholarship to my current program, and I'm about to have a major surgery/the program has been very accommodating about my recovery schedule. I also like my classmates and the program as a whole a lot. So for all those reasons, I am interested in finding the best way to make my time here work towards my goals. I've also changed my mind between a few related topics recently (tech in academic libraries -> digital scholarship -> software/app developer) and given that this program makes space for the first two very well, I'm nervous of like jumping out and then changing my mind. But I'm also open to thinking more about switching to CS.
posted by elephantsvanish at 9:25 AM on November 12, 2016

Response by poster: Wild_Eep: Ooh I haven't heard of that concept before, I like that! I am definitely interested in teaching/mentoring these skills at some point (especially to girls/women). There are also some positions in academic libraries and higher ed that allow you to both build apps/write code and also assist students and researchers as they learn and use tools themselves, and that is possibly appealing too.

(Okay, won't threadsit, just trying to get in some clarifying answers)
posted by elephantsvanish at 9:28 AM on November 12, 2016

Best answer: The difference between scripting and development, to use your terms, is the behaviors of long-running systems. A data analysis script might take a while to complete, but you’ll typically interact with it by starting and stopping it over and over. Development of a system adds on the complexity of managing resources over time. For example, in a long-running system, common problems include running out of space, running out of memory, or running too slowly to keep up with input. CS will help you with some of these things, but they’re more like operational catch-up games and must be experienced directly to be understood.

So I would find a project you can work on that involves this same kind of long-term system operation. Since you're at an information program, I’d look for something that gives you an opportunity to operate a database for a year or more. Maybe have your web crawler save things for later use, create a resource that other students find useful, or check out NICAR for other project ideas?
posted by migurski at 9:39 AM on November 12, 2016

Best answer: I don't know what school you are at or what the attitudes of the faculty are, but they ought to be open to some discussion and giving some guidance. "I'm really enjoying this. I can see I'm going to want a better background in programming & development. Is there a way I can structure my project to help out with that."
posted by SemiSalt at 11:33 AM on November 12, 2016 [2 favorites]

I think Code Complete is a great resource for software engineers (of which I would say that scripting is definitely a proper subset of that activity). Not all of the examples will be in languages you are super familiar with but what's important is why he thinks a certain coding style or technique or code arrangement is a bad idea and how to avoid it. You should absolutely use these techniques in your python projects.
posted by mmascolino at 5:19 PM on November 12, 2016

I think a lot of the things you want are best learned by failing miserably and then understanding your mistakes -espcecially stuff like staying organized.
Take on a long running personal project or start contributing to an existing open source project. Maybe one of your professors can help you find something. But things like algorithms and OO design look simple on paper and easy to implement in homework problems but making something that you can expand on 6 months from now is a whole different story. It's hard and I don't know anyone who got it right on their first (or 10th) try.
The flip side of this is that good employers understand that junior devs are still working on these skills and if you show a willingness to learn, they won't expect you to be an OK expert on day one and they will have processes in place to prevent you from causing a major disaster.
posted by martinX's bellbottoms at 5:29 AM on November 13, 2016

« Older Lets pretend that Obamacare is not going away   |   How to deal with split feelings on the Trump win... Newer »
This thread is closed to new comments.