Programming Language for a Product Manager
December 19, 2015 4:28 PM   Subscribe

My career has always been on the peripheral of more technical roles and I've excelled without getting to code-specific knowledge but in my job search everyone seems to want a product manager who can use code, even if it's not part of their job. What language should I learn?

I'm not even sure if learning a programming language will help my job search - I don't want a job as a developer but I think being able to say "I know _____ language and did a thing" would help. The problem is I really don't have a technical background as a doer in the tech space. The closest I've gotten to coding was putting JavaScript into an Adobe form which was mostly looking at what other people did and Googling code to understand how the functionality worked but didn't know the structure of the language very well.

What I'd like to know is:
-What language would you recommend (preferably something I would encounter in a tech company that deals with enterprise software, mobile applications, eCommerce, etc.)? And why do you recommend it?
-What resources (online, free or paid) would you recommend?
-If you've been or worked with a product manager, will this help with a job search (or performance on the job)?

I guess I'd like to build an app so I can have it on my phone to show people (I use Samsung Note 5, Android 5.1).
posted by toomanycurls to Computers & Internet (23 answers total) 17 users marked this as a favorite
I think you'd get the best bang for your buck if you learn SQL. There are different flavors but they have lots of crossover.
posted by pyro979 at 4:55 PM on December 19, 2015 [2 favorites]

A real coder will doubtless weigh in shortly and can cover the question about building an app.

From my own experience though I was in just this position this year and I learned some Python. I had some background from college approx 15 years ago in that I knew what a loop was and that they could be nested and so on, but not much more than you get in the first few chapter of an intro book. I found Python to be easy and very satisfying to learn, relatively speaking - there were moments of hair-tearing frustration, of course, but overall I got from complete beginner to writing useful data analysis scripts and some functional code on the platform my company builds pretty quickly.

Other things that may be helpful:

- You can do so much stuff in Python (and I assume other languages) by using libraries, and you don't need to understand how they work. Need to scrape a web page? Connect to an API? Output to a spreadsheet? There's a library for that.
- Stack Overflow is the home of all programming knowledge. Everything you as a beginner could want to know has already been asked, plus the community is friendly and helpful (in a sort of rules-driven way). Just search for 'how to X in Python' and up it comes. It's magic.
- The programmers I have worked with (I am a PM) are very happy that I have some real understanding of the difficulties they face and why things that look easy are actually hard. A little knowledge may be a dangerous thing, but it can also be a very helpful thing in sizing problems.

Have fun!
posted by StephenF at 4:58 PM on December 19, 2015 [1 favorite]

JavaScript and PHP are both really easy to learn, are easy to use, and are quite common. If you plan to work on the web, either would be helpful.

If you'd like to make mobile apps, Java (Android) and Swift (iOS) are your options.
posted by kevinbelt at 5:00 PM on December 19, 2015 [1 favorite]

SQL's great and broadly used but isn't a coding language.

Unfortunately, there's a real divide between "easy to learn" and "broadly used in Enterprise-level software."

Easy to learn, commonly used in Web-based applications, but profoundly weird in some respects: PHP and Javascript (learn them together).

Easy to learn, good for building your "coding fundamentals", relatively common in tech companies: Python or Ruby

Extremely common in enterprise-level software, not particularly easy to learn, good way of learning fundamentals: Java or C#. That said, there are TONNES of resources for learning Java and C# for a beginner. But getting to a point where you create a UI will simply take you longer in C#/Java than any of the other languages mentioned.

So overall I'd probably recommend Python. It's common (well-represented in GitHub repos and reasonably well-represented among job postings), easy to learn, and is fairly 'normal'.
posted by flibbertigibbet at 5:18 PM on December 19, 2015 [3 favorites]

Although Java and C# use very similar syntax, I found Java to be much harder to use because of the libraries are set up in a very techy way. Programming Java is also slightly complicated by it being device independent. So of these two, I would pick C#, pedagogicly speaking. I don't think you can do a phone-based app on the though.
posted by SemiSalt at 5:42 PM on December 19, 2015

Nthing python as a good general programming language that's pretty easy to learn. The thing to keep in mind is that there's two flavors of the language in use. Python 2 is the older, widely used one while Python 3 is the currently developed one. They're ~90% the same and you'll eventually get comfortable with both, but it can be a little confusing if you're just starting.

The book I see recommended the most is Automate the Boring Stuff (buy or read free online). It's a good intro to the basics of Python 3, and quickly has you manipulating files, scraping websites, etc. Expect about two weeks to work through it.

Learn Python the Hard Way (again, buy or read free online) is also recommended a lot. It takes a longer approach and uses Python 2. It can get confusing towards the end when the author wants you to work out things for yourself, but enough people have done it that google will get you out of jams. The nice thing about this one is it introduces you to a structured programing approach with virtual environments and unit testing (don't worry about that yet.) Expect about a month and change to work through it.

Another resource is O'Reilly's Learning Python (a pricey phone book.) It's really comprehensive but I wouldn't recommend it as a start to any but the most methodical personalities. It does, however, give you a rundown of what is going on under the hood. Several times. In increasing complexity.

Reddit's r/learnpython is also a good resource and their wiki has many more recommendations.

Also, as StephenF pointed out, google is your friend for any "How to do X in python" question, which usually results in a Stack Overflow post.
posted by ChurchHatesTucker at 6:01 PM on December 19, 2015 [5 favorites]

Also, as a manager, you'll benefit from learning about Software Development Processes. Python is also good here, since it is flexible enough to accommodate most (all?) of them.
posted by ChurchHatesTucker at 6:45 PM on December 19, 2015

Python is a great utility belt / thermonuclear chainsaw when you need scripting.

Javascript and then a graphics library like D3 is neat and fun, you can make pretty (and pretty amazing) displays of useful information with them. Or tie it to some whiz-bang library like Angular, GWT, Ember, or Backbone framework.

Also R is the "visual display / knockout reports" language of choice now, if you can incorporate that into your analytics / monitoring as a manager.

I would encourage you to "scratch an itch" and demonstrate you picked it up to improve yourself or make your life easier, not just "I picked it up to put on the resume".

And this way if comes up in the interview, you can hedge answers with "I was using X for Y, and I didn't learn the whole thing, I just got the job done", and perhaps go over how you used it to solve a problem.
posted by nickggully at 8:00 PM on December 19, 2015 [1 favorite]

Python shines when you want write little tools to make your own job easier, eg generating graphs for a monthly report, or fetching daily prices from a website, or turning some crappy text file from an old app into something you can use.
posted by i_am_joe's_spleen at 9:49 PM on December 19, 2015

I guess I'd like to build an app so I can have it on my phone to show people (I use Samsung Note 5, Android 5.1).

A lot of people are answering Python. That's fine if you want to learn programming in general, but the Android SDK is in Java. Learning Java would be the most direct way to achieve your goal of building an Android app. Java is also used quite often in the other fields you mentioned, enterprise software and eCommerce.
posted by panic at 10:06 PM on December 19, 2015 [3 favorites]

(1) learn python and do something you think is cool with it.
(2) put your project up on github, create a good readme and project homepage with screenshots.
(3) Show people this webpage on your phone.
posted by the agents of KAOS at 10:50 PM on December 19, 2015

I agree with learning Python as a first language. One of the best things about it is you can just install and start the interpreter, type print 'hello world!' and you're on your way. (Also true of Ruby and JS, which you can use just by typing into the debug window in your browser.)

I think there's a fairly large jump from hello world to an Android app. It's possible, but you'll probably spend a lot of time just figuring out the Android ecosystem, time that you could use building something cool with Python. Having said that, the concepts you learn with Python are entirely applicable to Java and getting the initial introduction to logic in a more forgiving environment might help.

Also agree with the notion that, as a manager, you might want to familiarize yourself with development methodologies, planning, frameworks, testing, etc., even if you don't become a specialist. Just knowing some of the vocabulary would help a lot.

While SQL would be a useful thing to know, it is very much unlike other languages mentioned in that it deals with operations on sets. The other languages deal with sequential logic. It's a very different way of thinking, with different goals. Unless you're going straight into databases, if you're just starting out, you should probably hold off on SQL until you need it.
posted by klanawa at 11:19 PM on December 19, 2015

Also R is the "visual display / knockout reports" language of choice now, if you can incorporate that into your analytics / monitoring as a manager.

I'm going to disagree and suggest that R remains really niche and is the domain of people who know something about math and/or statistics (not that the OP doesn't, but that sort thing people use R for isn't the bread and butter of project managers, as I understand it). I agree that R is a great choice for writing reports and charts (thank you Hadley Wickham) and learning to handle ggplot and Rmarkdown would probably be a career-enhancer. However, no one interviewing you will know what that means when it's on your resume. Any while you could use Shiny to have something to whip out on your phone, it'd be glacially slow.

I do think Python's the obvious choice because it lies at the intersection of "people have heard of it" and "might come in handy" (it'd be a good choice if you have to do things like doing repetitive tasks with spreadsheets). Ruby ticks the first box, but less so the second, I think. I basically don't use Ruby (despite working at a company where Ruby rules all) because it doesn't have the math/stats/analytics ecosystem that Python does and you might want to make a pretty graph or two sometime. I don't think either is big in the land of enterprise software, but I don't see that learning Java would be all that useful to you.
posted by hoyland at 6:46 AM on December 20, 2015

As a long-time product manager, I'm going to disagree with the premise. If a company is looking for a product manager who can code, they likely don't have a good handle on the role of product management (which is common, especially in startups). As a PM, I'd probably run away from that job listing.

A product manager's role is to understand the market, understand the business, and use that understanding to deliver guidance in the form of market requirements and prioritization that drives the product's strategic direction and success. Coding is not a necessary skill to succeed in that role. If you're actually down in the code as a PM, you're not working at the level a product manager should.

That said, having a fundamental understanding of technology and engineering practices will make a software product manager more successful. A product manager's role frequently requires them to be the go-between for different constituencies -- most notably engineering, sales & marketing, executives, and customers. The product manager has to know enough about each of those roles to be able to empathize with their needs and concerns and act as a translator. E.g. explaining customer requirements to engineering, explaining to executives why engineering can't entirely re-design the product in three weeks, explaining to customers why the company choose to build Feature X before Feature Y, etc. You need to know enough about all those roles to provide that translation.

Learning to code is one way for a product manager to understand his or her engineering team's position better, but -- and this is important -- it is probably the least efficient way to do that. After months or years of studying a programming language you might have an inkling of what it's like to be an engineer. But you don't always need to walk a mile in someone's shoes to understand and represent their concerns.

A more effective approach, in my experience, is to interview your colleagues -- and not just engineers, but all the other teams in the organization that you need to interact with. Learn the processes and systems they rely on, learn what their criteria for success are, learn the obstacles they regularly face, learn what their expectations are of you. Product management is a jack-of-all-trades role; you need to know a little about everything, but you don't need to be the expert in anything except your product, the problems it solves, and its measures of success.
posted by gritter at 7:08 AM on December 20, 2015 [12 favorites]

I'm a Product Owner who used to be a Software Engineer and I agree with everything gritter says above. You're not going to learn what matters to running a software organization by writing a utility program.
posted by matildaben at 7:20 AM on December 20, 2015 [1 favorite]

I'd say that "product manager who can code" is a shorthand for "product manager who has a technical degree or worked as an engineer." It's not generally "pm who learned a tiny bit on the side." I don't think it is the basics of coding they want but the deep technical familiarity and/or the hands on experience of working as a professional engineer.
That being said coding is fun and I think python + JavaScript is a good choice for learning how to prototype.
posted by ch1x0r at 8:35 AM on December 20, 2015 [1 favorite]

I say python. This is so you can prep data for analysis. These days product managers are meant to be able to use data to drive decision making. Analyzing A/B tests and log stats can be part of the package. Python, SQL, and a visual analytics tool such as Tableau is a very powerful and practical toolset.
posted by crazycanuck at 10:21 AM on December 20, 2015

Product managers with technical skills can be great, but knowing a programming language so you can make a toy app is probably the least useful technical skill you could acquire.

Software engineering is less about writing code (although it does involve writing code) and more about reasoning about complex systems. You knowing that you could write feature X in a day, in your toy app that you wrote last week and have total control over, is not a useful perspective to offer to your engineering colleague, who's going to be implementing feature X at scale, supporting a dozen languages / currencies / time zones, accessible to visually-impaired users, usable across dozens of types of mobile devices, compatible back to Android 4.2.2, conforming to security best practices and privacy regulations, in a code base that's fifteen years old and has been modified by a hundred people, some of whom were not good engineers (some of whom were interns...oh, interns...).

A good technical project manager is one who can have a conversation about a technical system, helping me to reason about it while also bringing in a stronger business perspective than I have. They understand the strengths and weaknesses of the system we work on, at least at a high level. If you will respect my insistence that we need to postpone feature X until we've improved test coverage, I could not care less whether or not you know how to write a unit test. And if you're an advocate for good technical practices, I'll also be more willing to listen when you insist there are good business reasons to take short-term technical shortcuts to get feature Y out the door.

I'd suggest reading more about engineering than about programming, possibly books like this one on legacy systems (haven't read it, so not sure it's the level of detail you want). Think high-level technical fluency. A product manager who showed up for an interview and said they knew python, like it was relevant, would come across to me as naive.

All of that said, if you want learn to code, by all means do so, it's fun and you can make useful things. JavaScript would likely suit you: it's quick to get something working and has a huge, though not consistently quality, community. Check out tools like MeteorJS, which is oriented towards getting a basic JavaScript application off the ground quickly and usable on both desktops and mobile. Even if you want a phone app, a web-based app is an easier route than Android, which is a complex and aggravating framework on top of a verbose language.

Most of the reasons I despise Android are around supporting a wide variety of devices and versions, and integrating with a related codebase written in Java 1.3....which is to say, most of the problems that plague me as a professional Android developer you could completely ignore. Case in point.
posted by orangejenny at 10:39 AM on December 20, 2015 [6 favorites]

After reading the other answers, wanted to add: my answer is 100% from the perspective of an engineer who works with product managers. Learning data analysis, etc. might be plenty useful when it comes to fulfilling your other responsibilities as a PM, just not so much when it comes to interacting with the engineering team.
posted by orangejenny at 10:47 AM on December 20, 2015

Learning data analysis, etc. might be plenty useful when it comes to fulfilling your other responsibilities as a PM

One of the ways data analysis is useful as a PM is in the analysis of your project work data. We use Jira in our shop, and we end up with hundreds of user stories over a few months. We use a version of SQL in the Jira search tool to get complex reports of user stories that meet specific criteria that don't fit into the "Basic" version of the search tool.

We also use SQL in the testing areas, to find test data that meets very specific criteria for a test case. Our user data is loaded to a data warehouse. The folks who are good at understanding how the data is organized in the warehouse, and who can join tables to locate records which meet complex criteria are seen as the leaders in the team of non-technical people.

Other than that, I agree with orangejenny that your best tool as a PM is to understand, respect and represent the needs of your team.
posted by CathyG at 11:06 AM on December 20, 2015

In my experience as a developer, it is not helpful to have PMs who have "learned a language". Learning a language is probably the easiest part of being a developer, and going out and quickly picking one up tends to result in a non-realistic view of development. It's like learning the alphabet in order to understand the work that goes into writing a novel: yes, technically a novel is made up of those 26 letters, but...

Some challenges that the weekend PM-picking-up-a-language doesn't face: Compatibility with multiple devices/old browsers/etc. Actual size data--you can't have inefficient queries with millions of rows and hundreds of thousands of users who hit that query every time they open your main page. Legacy data, shitty data that was entered in your system years before you were even on the project and backward compatibility with such. Shitty programming that was written years before, etc., and trying to figure out what, exactly, they were trying to do and if you need to keep on doing it. And so on.

Doing real development is helpful background for PMs if you want to go there (not mandatory), and it doesn't matter what language or really what you're doing, it's more about having some kind of long term commitment and experiencing the problems that can happen in real, multi-person development of a real project used by real people.
posted by anaelith at 7:51 PM on December 20, 2015 [1 favorite]

-What language would you recommend (preferably something I would encounter in a tech company that deals with enterprise software, mobile applications, eCommerce, etc.)? And why do you recommend it?

HTML, Python (+Django) and SQL. These are fairly portable skills: they apply to all three areas listed. Even "native apps" can be written using HTML views. But they're also broader skills. HTML has many obvious applications, Python is a very useful general purpose programming language, and SQL can be used to analyze enterprise data sets. For example, I use SQL to interface with our customer support tool to chart out open tickets over time; it's useful to know whether 90 open tickets represents a historic high, average or low point.

Django is a web framework that bills itself as "the web framework for perfectionists with deadlines." It's well documented, well supported, and designed for collaboration with non-programmers. There's a large community of people using it, and providing tools to make your Django app better / more useful. Django technically doesn't require you to learn SQL, but when you're ready to pick SQL up, Django has many ways of inspecting and poking the data using SQL.

The drawback to Python is mobile; iOS uses ObjectiveC, and Android uses Java, and generally don't get along well with other languages. But there are ways to cram Python into mobile. It won't be as 'native' as using Java, but the goal here isn't to write perfect apps.

-What resources (online, free or paid) would you recommend?

Project Rosalind is a nice online problem set you can use to guide your Python learning. There's also ProjectEuler if you're more math inclined. My Django developer employees tell me two scoops of Django is a good resource for learning modern Django, since the official book hasn't been updated in years.

I found SQLZoo a useful guide to advanced SQL queries. There's countless tutorials, books and classes on SQL on the internet.

If you're extremely new to programming and such, App inventor is a GUI tool for building apps; the Blocks system they use maps cleanly to modern programming, and just uses drag and drop to enforce grammar -- you can't construct invalid programs. Unfortunately, they don't seem to have kept pace with the Android upgrades, so it'll look outdated on modern phones. But for just getting something working immediately, and proof of concept type work, it's viable.

-If you've been or worked with a product manager, will this help with a job search (or performance on the job)?

I've never been or worked with a product manager. I wouldn't focus on the 'I can do programmer's jobs better than they can' or 'I can second guess estimates', rather, I'd focus more on 'I've done a small product end-to-end by myself'. There's much more to products than code, and a small product available on app stores will not only demonstrate that you're aware of the pipeline, but also give you a framework to practice and demonstrate product management skills.
posted by pwnguin at 12:47 PM on December 25, 2015

I have 10 years experience as a Business Analyst and Product Manager and I currently hire and manage a team of Business Analysts and Product Managers. I don't require coding knowledge or experience but it helps. I've found that a strong background in SQL is especially useful because it enables you to quickly get a sense of the underlying data the code uses, and that in turn helps you have conversations with developers about actual functionality.

But! That alone isn't really what I look for. orangejenny has it right, your best use as a PM/BA role is to obtain that "high-level technical fluency". Even a person who is well-versed in C#, for example, doesn't necessarily have the high-level technical fluency to discuss the Product in its entirety...especially if it's a complex product with a large infrastructure (example: we have a team that is extremely good at engineering payment processing for our product but knows very little about how our notification system works).
posted by Doleful Creature at 2:20 PM on March 8, 2016

« Older How to upload info to Covered California website   |   Looking for good plans on the Maryland Health... Newer »
This thread is closed to new comments.