How to implicitly check method arguments in Python?

Should I switch careers and learn to code?

  • I'm considering doing a career 180 and learning how to code. Should I do this? Do I have what it takes? What is it like to program for a living? Details within... Before I get specific, and just so you don't think I'm a lazy-ass, I have searched Metafilter for similar questions and found some very good information. Where I'm at now: I'm in my early 40s and I've managed to stumble into a career as a composer/creative director, mostly doing music for TV commercials and short films. For the past couple years I've been freelancing, and though I like the freedom and time with my kids, the income stream has dried up and the financial stress has become too much. I've been trying to figure out what else I can do to make a good living and from what I understand, software developers are in very high demand right now and it can be a very decent paying gig. Over the past couple days, I've started a couple Ruby tutorials on the web: http://pine.fm/LearnToProgram/ and http://ruby.learncodethehardway.org/ I'm not very far along, but so far, so good. I'm concerned that as things get harder, my focus will fade. There's also a free Ruby meet-up group here in Brooklyn that I've contacted. That may help keep me on task. I also looked into the free http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/lecture-1/ offered online, which looks great. I like the idea of following a tested curriculum and having that framework to guide me. Their focus is Python, so I guess I'm at a fork in the road between Ruby and Python. I've looked into the arguments for and against each and it seems to be pretty much a toss-up. I guess I'm asking a couple things: 1) What is the fastest, easiest way (language, method) to get to the skill level where I can be hired somewhere and make a good living? My hunch is that I'd be better at writing apps, games, and web-based code than more purely functional stuff (servers/databases/etc.) but I could be wrong - I'm just basing that on what seems interesting to me and what I use. I have a very creative mind and I also love taking things apart and fixing them and solving problems. I want to make stuff that ordinary people will find useful or delightful. But abstract math-y stuff doesn't interest me so much and I think that may preclude me from starting with some types of languages. Right or wrong? What are the starting salary ranges for this type of work? I'm in Brooklyn but I'd consider moving if it meant a steady job. 2) Am I cut out for this work? Is there any way to tell ahead of time, without investing hundreds of hours into it? What kind of mind/temperament is needed to be good at coding? I don't think I was born to do this but I think I could do it fairly well. is that enough? 3) What is it like to code for a living? I have this mental image of a bleary-eyed, pasty-faced man at 2am, with twinkie wrappers and star wars action figures strewn throughout his cubicle. How many hours a day can you expect to work? What percentage of that is actually typing into a computer? I'm sure there are massive variables here - just asking about specific experiences you all have had or are aware of. 4) What am I forgetting? What am I missing? Thanks for indulging me here - I really appreciate whatever insight you have.

  • Answer:

    1) What is the fastest, easiest way (language, method) to get to the skill level where I can be hired somewhere and make a good living? From the time I started programming until I crossed the $100k/year threshold took me about 10 years, including 4 spent in a computer science program at a university, and covered at least a significant amount of C++, Java, Perl, PHP, Javascript, and a bit of some other languages. Could you do it faster? Sure. Maybe in like, 8 years instead of 10. apps, games, and web-based code than more purely functional stuff For the most part, you can't tell the difference while you're writing the code. It's like saying you'd be better at painting Ferraris than minivans because they're cooler. I have a very creative mind and I also love taking things apart and fixing them and solving problems. If you can put this and GDB to use solving esoteric race condition and concurrency problems, you're hired. But abstract math-y stuff doesn't interest me so much You can't only want to do the fun part. The reason the field pays well is because it requires a lot of experience and understanding of difficult concepts. http://en.wikipedia.org/wiki/Big_O_notation. Here's a serious challenge for you. Look up "quick sort". Figure out how it works. Understand *why* it runs in N*Log(N) average case and N^2 worst case time. Understand what choosing a different pivot point means when the input to your quick sort function is already sorted. Then you will have basically done the first week of a data structures and algorithms class on your own. This, IMO, is the single most important class that a CS undergrad takes, and it contains the most key concepts required to work in this field. What are the starting salary ranges for this type of work? I started straight out of college in San Francisco at $68k/year about 6 years ago. 2) Am I cut out for this work? Is there any way to tell ahead of time, without investing hundreds of hours into it? Maybe? How do you know? Try it. If you hate it after 10 hours, don't put in hundreds more. If you love it after 10, keep going. What kind of mind/temperament is needed to be good at coding? I don't think I was born to do this but I think I could do it fairly well. is that enough? This is a question that doesn't matter at all. If you're good at it, it will become self evident. If you're not, that will too. Being that you can't objectively classify your own "kind of mind/temperament" it doesn't matter. Oh, but it does require the "kind of mind" that likes to objectively clarify things. If you're going to tell me "I have temperament X" you had better be able to prove it if you want me to care, same as if you tell me your sort algorithm runs in N(log(log(N))). Show me, don't just say "I feel like this is probably the case". 3) What is it like to code for a living? It's like working in an office. You park, go inside, get a cup of coffee, ask your co-worker how he's doing, read your email, respond to the urgent ones, go to a staff meeting, write some code for a couple hours, see who has time to go to lunch, drink more coffee, code for a couple more hours, complain about how you're supposed to have to store proxy credentials in windows 7, get sidetracked into a conversation about The Wire, go home. 4) What am I forgetting? What am I missing? It literally takes 10 years to be *good* at this, which is why it's in strong demand. There are only so many people who've put in the time, and there are more positions available than there are people with those skills. If you could become employable in three months, then the market would ber saturated. You can probably find some relatively entry level gig at some place where nobody else is programmers with a year's experience, but at a real software company where the people who interview you for the job are other programmers, they're going to ask you questions like: given a "Boggle" board and a dictionary, write an algorithm to find all the words the board contains. What's the runtime complexity of your algorithm? How could you optimize it? And you'll have to do it in 20 minutes on a whiteboard. Oh, and they'll hardly care if you use Ruby or Java or whatever. Choice of language matters only slightly more than choice of pencil would if you were hiring a writer.

lukievan at Ask.Metafilter.Com Visit the source

Was this solution helpful to you?

Other answers

I only came in to say you might want to check out http://codeyear.com/, which is a weekly coding lesson that seems like it might be pretty cool. I just signed up this morning.

gauche

http://norvig.com/21-days.html. What's it like? I've been writing code since I was in 8th grade. What really did it for me was the "make the monkey dance" aspect of it. Out of thought I could make a reality that could grow and flourish. The trick was figuring how to get from the thought to its representation in code. Doing this well takes a long time and requires writing a lot of code. Seriously. On a day to day basis, I come in and deal with email that has stacked up, have a morning status meeting to see where my colleagues are, then I sit down to code on my current project. On a good day, time will go into a weird shift and I'll lose about 3 hours of awareness because of depth of concentration. If I'm doing new code, I'm spending a bunch of time thinking about the overall design and how it fits into our existing code base as well as how it can grow in the future (is it extensible? are the abstractions in the right places? will I regret the nomenclature? how can I eliminate bugs in code through the design? etc.) and also writing unit tests. As an experienced developer/architect, I also work with my colleagues routinely. Sometimes a few choice words can prevent hours wasted. In addition to writing designing and writing code, I also spend time making my workplace a more awesome place to be. This is done through things as simple as talking to people, questioning corporate BS, trying to remove pain points, making the environment fun, preventing toxic interactions, and so on. I also have to look at our overall processes and make sure that we are engaging in best practices and working with the team to improve the, Some people will make a big deal about which language you should use. I'm firmly in the other camp, mostly because over my career, I've become a polyglot. From my point of view, pretty much all high level languages are the same. There are proofs of this (that imply more that you can't do anything in one language that can't be done in another), but it comes down to being able take a large process, turn it into smaller sub tasks (hopefully named) and be able to repeat, test/branch, iterate, and perform simulations of arithmetic. For example, I wrote procedural code long before I knew what it was in assembly language. I wrote object-oriented code in C long before I knew what OO was. Each language has a particular flavor to it that makes some things easier than others which in turn might lend itself to certain solution techniques, but it doesn't mean that those can't be used in other languages. For example, I've written a bunch of F# code that heavily leveraged F# partial function application and functions as (more or less) first class objects. I have also written that in Java which doesn't have either of these things in the language, but can be done relatively painlessly in other ways. For a beginner, I'd say that you can make the learning curve more reasonable by looking at languages that are garbage-collected at the least, fairly widely adopted, with strong support libraries, and with plenty of online examples. This would put Java, C#, VB, Python, and Ruby on more or less even footing. Javascript less so. Writing code has had interesting side-effects on me. For example, I used to giggle a little bit whenever a cashier asked me "cash or credit?" because my inside voice would answer "yes" or "true." Another example is that recently, I woke up at 3:30 (after a whopping 4 hours of sleep) and stared at the ceiling and designed a way to hack code for the sound board of Robotron/Joust/Stargate video games to play multi-voice music with (possibly) programmable wave tables. For no other reason than I thought it was interesting, I spent a few hours running a thought exercise for hardware that has been obsolete for several decades that uses a processor for which I can read the code of but have never written a line. And then a day later on the walk from my office to my car in the parking lot, I was designing the toolchain I would need to write that code to run it on MAME. This kind of thing happens all the time to me. It isn't always so esoteric - I was driving home from a family thanksgiving (a three hour drive) and I completely redesigned our company's memory management strategy as well as a rough schedule for implement those changes that would end up taking three years of small steps before being fully realized, but would minimize impact on our existing customer base (and in reality, we have had precisely 0 support cases on the single breaking change I had to make to the public API). I've found it to be an utterly fascinating career and I like where I work and look forward to coming in far more days than not. Not a small part of that has come from my ability to effect positive change.

plinth

What is the fastest, easiest way (language, method) to get to the skill level where I can be hired somewhere and make a good living? Given your background in creative directing, you should really consider a lateral move to Project Management. Study up on Scrum / Agile development, perhaps consider taking a course in project management that ends in a certificate. Once you understand what software project management is all about, you shouldn't have any trouble explaining how your prior creative work directly applies to managing software projects. Next, gain a year or two of experience as a PM. Top companies will want you to have development experience, so keep teaching yourself Ruby. Picking up some Python and C won't hurt. Work on Project Euler challenges, and become an active participant in Stack Overflow. At this point, you should have some experience working in your PM role with software developers. It should be easy to shift into a dev role, if that is what you really want.Am I cut out for this work? Is there any way to tell ahead of time, without investing hundreds of hours into it? What kind of mind/temperament is needed to be good at coding? I don't think I was born to do this but I think I could do it fairly well. is that enough?There are a lot of similarities between music composition and software development. You can just wing it and get decent results, but a grounding in theory will help you in either discipline. Most dev shops will expect you to have a grounding in CS fundamentals. Rather than a large set of rules-of-thumb, CS fundamentals are really simple principles about how to think and how to think about thinking. They can be brain-bending at first, but anyone can master them with a little effort and help.What is it like to code for a living? I have this mental image of a bleary-eyed, pasty-faced man at 2am, with twinkie wrappers and star wars action figures strewn throughout his cubicle. How many hours a day can you expect to work? What percentage of that is actually typing into a computer? I'm sure there are massive variables here - just asking about specific experiences you all have had or are aware of.That's about as realistic an image as that of the professional musician surrounded by drugs and hookers as they bang out a hit at the Bösendorfer at the end of a three-week-long bender. Sure, it happens, but it isn't the norm. Software development is a profession, like any other. Twenty-year-old kids may try to pull all-nighters to get stuff done, but professionals pace themselves and work 40-hour weeks. In an intense environment, you may work 50-60 hour weeks. Judgement and productivity fall off dramatically as you get tired, so a good manager will actively prevent their team from getting into death marches like that.

b1tr0t

1) If you want the fastest, easiest way to get an employable skill, just do html/css. Tons of good resources out there on how to do it "the right way" and the rules are really straightforward and easy to understand for most people. "Apps, games, and web-based code" involves a lot of "purely functional stuff". Hate to break it to you, but there is no "simple way in" to making delightful and useful apps without any effort. Making useful apps is a hell of a lot harder than making confusing, patched together ones. I am a firm believer in the 10k hours to mastery thing. If you want to do this fast and easy, you are probably going to be bad at your job. However, most day to day coding does not involve a lot of math, unless you are working at a very high level for financial institutions, or in research. (There is the caveat of front end development and animation, something really important for games, which does involve math--but it's really basic stuff you probably learned in middle or high school). Starting salaries in NYC seem to be around 45k unless you went to a top tier school. MS, Apple or Google pays around 140k for the youngins who went to MIT, etc. If you are just starting out, expect to work a lot of (unpaid) overtime. 2) Just try it out, and if you are hating every second of it, you are probably not cut out for it. 3) Everyone I know works 9-10 hour days every day, with some crunch periods of longer. Including people with kids. Around 80-90% of my day is spent typing into a computer. At more senior levels, there are more meetings. 4) If you're just picking this out of a hat because you heard it was easy and really profitable, that is a bad reason to pick a career that is not easy in actuality. Maybe you would be more interested in doing UI development or something (note: don't think this is easy either, just might jive more with your past experience)? This is also in really high demand in NYC, and the best ones know html/css and some javascript, but do mostly design work. One other thing, most places don't consider ruby/python to be "software development" unless you're at a high level. Try searching "web development" job postings for an idea of the kind of skills you'd be expected to have, and the kind of income you can expect to make.

shownomercy

It's difficult answering your question because the market is so broad right now. If you want basic broad marketability, then learn Java or C#. There are frameworks that layer above those languages, but start there. It is hard to say what time-frame qualifies as 'fastest'. Becoming a good developer is more than just coding or knowing one language. It's about foundations, algorithms, data structures, and soft concepts like communication and realizing end-user (business) value of spending time on features and bug-fixing. What kind of mind/temperament is needed to be good at coding? In terms of mindset, it is valuable to be able to admit you are wrong or don't know things. You will often need to know how to find out things in order to start a problem. You will be given a task that you know little to nothing about other than a high-level idea. As such, you will need to translate that idea into lower-level abstractions which eventually lead to code, interfaces, and protocols. The best developers I have worked with excel at one or more of the following: * Idea guy - The guy who spends a lot of time coming up with grand, interesting feature ideas. * Technical guy - Knows way too much about the nuances of languages and frameworks. Way too much where you are glad he or she is on your team. * Automation guy - Identify areas that are being done in a single or series of manual steps and automates them away. * Business guy - The guy who can see the value of spending time on features or the value in pushing back against creating features. What is it like to code for a living? It depends on the company, product, and your manager if you have one. I have done late nights and weekends in my career. However, most days are standard work hours because I have prioritized that criteria in my job searches. At my previous job, which was large company/process heavy. I would spend a large portion of my day on meetings and process rather than coding. When coding was required, it was expected I would do it fast and clean. The remainder of the time was supporting automation, testing, and bug fixing. At my current job, which is small company/process light. I spend a large portion of my day coding rather than meetings. I find I have more time to think about what I am coding, specifically, so I can keep it maintainable.

seppyk

http://ask.metafilter.com/150847/Starting-a-computer-career-as-a-40yearold is a real concern in this field. It's not a complete deal breaker, but you should at least be aware of that when deciding whether to pursue software development as a second (or third, or fourth...) career.

ceribus peribus

What is it like to code for a living? You feel confident that any technical problem can be solved, given enough time and information, but you simultaneously always feel like you are making it up as you go. You have no magical thinking about how computers work and it annoys you when you rub against people who do. This is an interesting and deep question all to itself that it would be fun to develop out further.

dgran

1) Very few software developers actually build servers/databases - most solve business problems using tools built by others. To find jobs via "recruiters", you will need at least 2 years of work experience, so for now you will have to apply directly. 2) Do you find that when you get into a problem, you develop "flow-state"? Are you willing to be constantly learning the ever-changing technology mix? 3) Your mental picture depends on who you work for and where. If your skills are not fully developed, then yes you probably will be putting in more late nights than somebody with more experience - until you gain that experience. And... well, it depends on your personal situation - when my kids were younger, I worked less. However, now that I am paid by the hour as a contract consultant for obnoxious rate - I work more, because I want to maximize my revenue ;-) 4) Straight-coding is one of those easily outsourced skills - what you need to also ensure are top-notch are your consultative/communications & troubleshooting skills.

jkaczor

There's much more to computing than just code - if you want to be a codemonkey, no more, then there are jobs out there, but really if you're into a career in computing, you'll need more. To get a coder job in the UK (not sure how it is in the US but it can't be that different) you'll need either a CS degree, or a shithot portfolio, or you'll need to be going for an entry level grad-type job (where they don't pay you much but they do train you - these are super-competitive). It looks like the middle option - AKA shithot portfolio - is what you're thinking of. So you want to learn to code, you want to get on github and stackoverflow and get yourself a reputation as someone who knows what they're talking about, you want to create some cool stuff, and you'll really want to work at it. Are you good at abstraction? Try having a go at the tasks on http://projecteuler.net/problems and see where you get; they're a good way to develop your abstract muscles. Possibly the best route for you would be to look for something that's cognate with your existing skillset - programming for music and musicians maybe? I have no expertise in this though so can't advise. An excellent, natural, coder is a rare thing; a good software engineer takes some talent and a lot of training.

handee

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.