Facebook SDK

Sunday, October 2, 2016

Software Engineering vs. Computer Science

(Note: This was originally written for my company's blog, but it hasn't been posted yet, so I'll post it here).

This article is designed to show how software engineering (SE) is different from computer science (CS), and what is needed to become a good programmer, regardless of the programming path chosen.

First, let’s identify what a software engineer is supposed to do. Helpfully, Wikipedia provides a number of definitions from several different sources; basically, however, it comes down to using engineering principles in the development of software.

How does this compare to computer science? CS is figuring out how to make a computer do something, specifically how to program software to do a variety of things with computers. It also covers the theoretical aspects of computing, allowing the CS graduate to develop new solutions to computing problems.

Where scientists are pushing the boundaries of knowledge by designing and testing theories, engineers take what is already known and do great things. Engineering takes current scientific principles to design and build “something”; in SE, that “something” is a computer program.

Basically, SE takes the programming aspect of CS and doubles down on it. Engineers need a broad scope of knowledge, and be able to incorporate a variety of different disciplines to create the final product. Scientists tend to focus on a narrow, but deep, area of knowledge.

Another significant difference is that engineers typically earn degrees that are accredited by ABET (Accreditation Board for Engineering and Technology). This guarantees that graduates have a minimum level of engineering and applied science knowledge, much like having a technology certification. If you want to prove your ability, you can earn a variety of professional software development certifications from IEEE.

This comparison shows that, as an SE, you will need to know how to program but in a particular, applied manner. Recognize that your education only provides the groundwork for this; all a college education is supposed to do is provide a base level of knowledge and education about a subject so students can question the status quo and gain the skills to perform their own learning. During your education, you’ll only know the basic principles of your career field; it won’t be until you enter the job market that you will see how those principles are applied in the real world.

So, to the meat of the question: ”How do I improve my coding skills to be a great software programmer?” First, I recommend that you find something that you are passionate about that can be coded and use that as your motivation for learning to code better. Personally, I self-learned Python after learning C, C++, and Java in school; I hated those languages to the point where I didn’t want to be a programmer. But I still had a desire to learn how to program (my education didn’t really do that), so when I learned that Python was a good hobbyist language, I decided to try it.

Because I knew just reading books wasn’t going to keep me motivated to finish, my impetus for learning Python was to recreate an old table-top role playing game in electronic form. That simple end-goal kept me going when I didn’t understand what was going on or how to do something.

If you are like many college students, you probably haven’t done a lot of programming for personal projects; a lot of students I’ve met simply do the homework and cruise through the classes until they get their degree. The best ones, however, have a personal project that they use to practice what they have learned. Completing a homework assignment doesn’t necessarily mean you understand what is going on; when you are on your own, with no guidance, you have to really understand your code and figure out how to best write the program and troubleshoot it.

If you can’t think of anything for yourself, then ask friends or family if they have any programming projects. This might be an even better option than a personal project, because now you have to work with a customer who may not know exactly what they want but is demanding anyways. This will help you learn how to deal with non-specific requirements, expansion of software requirements, and the basics of project management.

You can also look at participating in open-source projects that not only help you grow as a programmer, but will also teach you how to work with other programmers and the bureaucracy of coding projects. You’ll also gain experience in having other people reviewing your code and providing constructive criticism; some people find out that they don’t handle criticism very well and either learn to deal with it or find another profession.

Ultimately, being a better programmer means you have to understand how to program. I don’t consider myself a programmer by trade; I have a BS in Computer Engineering Technology, an MS in IT Management, and two years towards a Ph.D. in Information Systems. The only reason I really know how to program is because I wrote my own Python programming book series. Despite the lack of formal Python training, this knowledge was sufficient enough to lead to two professional programming jobs and two instructor jobs.

To write those books, I had to delve into how programs are written and how the language works, yet, even now, I’m still learning. Every job I’ve had, whether as a programmer or instructor, has taught me more about different programming aspects than I knew before.

Being a great programmer, regardless of whether you are a software engineer or computer scientist, is a process of continually learning how to be better, building upon the knowledge you have in order to make new things. As long as you have confidence in your abilities and you continue to learn, you will do alright.

Thursday, June 23, 2016

Comparing Python to C/C++

Found this post on Quora.com. The graphic attached to it pretty much sums up why I like Python so much.

Tuesday, June 21, 2016

3rd Edition is finally available

After more than a year, the latest edition of Learning to Program Using Python is available. The 3rd edition was just released on Amazon, Smashwords, and CreateSpace (links below). If there is a format you would like that isn't provided via one of these methods, please let me know and I'll see about getting it added.

Apart from the usual editing changes, new features include: web programming, GUI programming, using PyGame, parallel programming, using Python's documentation features, new sample programs, and a number of exercises for the reader.

Paperback: https://lnkd.in/eZFiGzk
Kindle: https://lnkd.in/eT8cikC
Other formats: https://lnkd.in/eiU-x2N

Monday, May 30, 2016

New edition next month

I'm currently working on the publication data for the book, and I have a volunteer assisting with the editing. I expect to have the new edition out sometime next month.

The book is approximately 300 pages, all of it actual material; I removed the GNU license information as people can view that online if they choose to, and it was just taking up space.

I haven't decided on pricing yet, but it will be comparable to the previous editions.