I am considering pursuing a position as a programmer in the future. I want to know what, if there is one, is the standard for someone to be considered proficient or fluent in a programming language. For instance I have read a few programming books and have written some programs, but I certainly feel like I have a long way to go before I could program at a professional level. There is always new stuff to learn, but at what point can someone say the "know" a language?
Update:Thanks for the responses. I wasnt a cs major at school but I did take a number of programming courses. Maybe a better question would be, beyond the courses that cover the basics, what books would you recommend to cover the important topics covered by a cs major? ie data structure and algo design, or other more advanced programming topics.
Copyright © 2024 Q2A.ES - All rights reserved.
Answers & Comments
Verified answer
Many good answers here. To answer your original question, I would say that proficiency with a particular programming language comes primarily from experience. There is no way around it. No amount of studying will do. You have to get your hands dirty solving real world problems with the language. It is in these scenarios that you discover the nuances of the language, its strengths and weaknesses, and judgement to decide what approach is best when the language offers more than way to do things. Learning the computer science basics would certainly help (there are books like "Code Complete" that do this) but I would suggest you find a job that allows you to program in the language of your choice.
It's certainly possible to learn programming on your own, and many people do it quite successfully. But it's also helpful to have documentation showing that you know what you're doing, and that means a degree or certificate. In your position, I would check into computer programming majors at a community college. You may be able to "test for credit" in some of the courses. Because the classes are often taught by professionals in the programming field, you could pick up a lot that's not in the books alone. And when you have a certificate or degree in your hand, it puts you way ahead of all the other applicants for the job.
There are certainly language-specific certification exams you can take (Sun Certified Java Programmer, for instance, and MS has its own set). Consider getting a study guide for one of them, but do keep in mind that not nearly all of us pros have any of those certifications.
Honestly for me the biggest hurdle in becoming a professional, or in switching from one job to another, is just learning my way around the new company's codebase. Sure, I know all of the 40 or so keywords of the language, and I know my way around various publically-available APIs, but jumping into a product that others have been working on for quite some time already requires you to learn what proprietary objects and methods have already been created as part of that product. There's no magic bullet for that, just time and experience, but things that could help you now are: 1) Learn UML, 2) Learn various design patterns (facade, etc.), and 3) Get familiar with a large codebase for some product (perhaps an open-source one) just so you get used to navigating through something with hundreds of source files containing tens or hundreds of thousands of lines of code.
Good luck!
Being familiar with basic syntax is probably the only real criteria for considering yourself 'proficient' with any given language. Being proficient in programming in general is another story - you need to be able to think logically, analyze requirements and develop efficient algorithms to really be a good programmer whatever the language. I've run across so-called experts who knew syntax backwards and forwards but couldn't program their way out a paper bag without someone else giving them a flowchart to do it.