Sunday, September 11, 2016

How To Become A Better Programmer

Becoming better at nearly any craft, normally involves lots of both studying and practice. A pianist will always both study music and practice musicality. A chess player will both study the game of chess and actively practice as well. For software engineers, the logic remains the same. We should always be both practicing and studying the most effective programming paradigms. So this leads us to the question. "How do we both study, and deliberately practice?" Hopefully this post will help us uncover some of the mysteries involved, as it relates to programming.
If you're reading this post, I'm sure you're already familiar with how to study. So let's ask ourselves, what is deliberate practice? One could define deliberate practice as, actively and accurately, engaging in a said craft by doing. Once a musician studies a specific genre, he/she can then physically practice that area of musicality, and once a chess player becomes familiar with the game of chess, one could then practice it. Once again, the same logic applies to programmers.

I've found one of the best ways to deliberately practice as a programmer is by both studying, and then doing. One could dig a lot deeper inside of both of these areas, but let's keep it more concise for time sake. Consider arrays, case/switch, and the binary search algorithm for example. Without studying or reading over arrays (studying),  it would be hard for a person to know when and where to use its logic. One could easily be creating a ton of extra variables when a simple array would suffice, but if that person never studied arrays first it would be difficult to even know where to start in regards to arrays. If that same person only used if statements and never studied case/switch, he/she could potentially run into a situation that strongly suggest case/switch, versus 150 back to back if statements. Or, if one never learned to use the binary search algorithms, he/she could potentially find a situation that requires searching huge numerical data, and only iterating over one number at a time until the number is found. While the former of these examples could work, it lacks efficiency in most cases.

Let's also be careful on the advice that we receive while asking, "how do I become a better programmer". Everyone's situation is different and what works for someone else may not work for you given your situation. The response I've heard people give most of the time was, "to get better a programming, just program". This could not be any wronger. I would not tell a pianist, just play the piano, or tell chess player to just play chess. I also would not tell a boxer to just get in the ring and box. In the boxer's case, that bad advice would only get him hurt. He needs to learn and practice his jab, his right and left hooks, his uppercuts, stamina, etc... He can't just get in the ring and box without first learning and actively practicing boxing, outside of a direct competing event. Could one not "just program", and do an ill efficient job at it? Of course he/she can. Our earlier examples about searching one number at a time, would be the perfect case. If that person asked how to get better at programming, and we replied, just program, how would this help him in any way? This would probably not help much.

My more specific advice on this matter would be to first ask that person, what it is that he/she specifically do or want to do as a programmer, and then cater my answer towards that person. My answer in regards to the foregoing logical context of this post, would be to study by reading well coveted software engineering books, and doing every quiz/project, and involvement, until you have a solid understanding of the programming methodologies taught in that book. I would then say to apply that logic to whatever study method they are using, books, online tutorials, videos, etc... Doing this would allow them to first study (learn it), and then do it, by practicing it with the practice questions. Afterwards, one could then practice a lot further, through building personal projects. Some might prefer to build personal projects first, It's more of a matter of preference.

Monday, September 5, 2016

Battle Tested

If I was an everyday vehicle, I would be a Mack Truck. To be more precise, the short and stout model that is. A Mack Truck can have multiple responsibilities. One of which is to take large amounts of cargo from one side of the city, state, or town, to a given location with very little worry if the cargo will be delivered or not. A Mack Truck can also take a beaten and keep going. We've all heard stories of Mack Trucks being involved in a crash and came out completely operational after inspection, while the other involved vehicle was totaled.
My analogous logic for this is because in life, I've been left with huge responsibilities and trust from my employers, family, and friends, and in every situation, I delivered. The same can be said for adversity. Like everyone else, I deal with life's challenges as they arise. It appears that in this lifetime, I was unfortunate enough to have received enough adversity for two or three more lifetimes. But, like a Mack Truck, having the ability to keep going after so many crashes, I keep high aspirations and I will keep going, after any past, present, or future challenge that life brings my way. Battle tested.  

Saturday, September 3, 2016

Algorithms

Algorithms are all around us. We use them everyday. Some are simple: wake up, brush teeth, shower, while some are complex: drive to work, if this road is blocked, take the other logistical road, while driving don't text, increase decrease and average speed variations, keep eyes on the road, etc....

On the Algorithms page of this blog, I will post every algorithm I do from FCC and other sources that comes up. You will see the questions, my thought process of analyzing such, and the finished code logic. I hope you enjoy reading this as much as I enjoyed coding it.

The latest algorithm I completed was the reverse an array algorithm. It is one of the first challenge on the algorithms sections of FCC's website.

Website: FCC.

Instructions: The instructions basically said to reverse this JavaScript string.

Thought process: Because the instructions are very simple, my thought process was very quick and structured. When dealing with JavaScript, we have to keep in mind that it is a loosely typed language, one of the results of this is that the variable data type, will dynamically change, based on the data that's entered. Keeping that in mind, we now know the reverseString() method first takes in a string, thus we can start by using "string" modification and parsing logic. This first code we need to write, line 4, is to split the string with the split() method. "The split() method splits a String object into an array of strings by separating the string into substrings." The reason I decided to do this is because the "str" variable will now become an array, and that's what we want because it is quite easy to reverse an array in JavaScript because all we need to do is call the reverse() method on the array. But to first do this we had make the "str" variable hold the array data. Now that that is accomplished, we can then use the .reverse()  method on the "str" variable *(line 5)* because it now holds array data. Now that I both split the string data into an array, and then reversed the array, it is now time to join the contents of the array back together which will then form back into a string. We do this by using the .join() method, which joins all elements of an array into a string. Now the only thing left is to return the parsed parameter. 

Wednesday, August 3, 2016

Learning to Program

No one is really born being good at something, at some point, everyone had to learn. A basketball player has to learn the basics of basketball before he/she can ever considers being great. A chess player would have to learn every piece on the board's capabilities and how to strategically use them. The same logic could be said for nearly any craft, and programming is no different.

If you're new, you probably have many questions. Where do I start? How do I really learn? How do I know if I'm even learning? Am I good enough, and how would I even know if I'm a good enough programmer to get a job? And so on......

Well, here is my advice on this.
*Disclaimer: In no way I, or one single entity, will represent the entire programming community as a whole. If you find evidence conflicting with this by one who is considered a higher authority on the matter. Feel free to refer to it.* So, lets focus on one question at a time. "Where do I start?". This really can depend on what you're wanting to learn, for me, there is no way of knowing this. So I will focus the answers around "core" programming, because regardless if one is programming an IPhone, Droid, Windows, etc... he/she would still have to allude back to core programming capabilities.

Where do I start?
I personally started out with some cool books and video tutorials and suggest you do the same. The video tutorials allowed for easy comprehensions of subjects taught through visual simulations, while the books allowed for a bit more detail. The books also gives one the ability to quiz, and to do small to medium projects, which really helps with the leaning by doing paradigm. 

How do I really learn?
An overwhelming amount of  teachers, college instructors and professors, and neuroscientist, all agreed that one of the best ways of learning is learning by doing. Of course one has to be shown in some way how to do it, but shortly thereafter is when one should do it. This means if I was to teach you the "switch statement", I would explain and show you a logical example of what it's doing, and then immediately have you to do it yourself about 3 to 5 times. Using this method will increase the cognitive strength of the neurological connections in the brain as it relates to memory and performance.

How do I know if I'm even learning?
Including lots of quizzes and building small to medium size projects are both good tools to help you see if you're learning. I suggest bite sized learning. Focus just on one subcategory at a time. After you're taught the subcategory, write code that utilizes the learned data, and then take the quiz. When you write the code that utilizes the learned data, that's a big indicator that you're in fact "learning". The quiz, if wrote properly, could help you out on some things you may have misinterpreted during the learning. If this happens just go back and study that area. Once you're doing well on quizzes from reputable sources, you can take that as another indicator that you're learning and move on to the next step.

Am I a good enough programmer to get a job?
This is a good question. A lot of very good programmers struggles with the imposter syndrome. A syndrome that makes a person feel like he/she is not good enough, no matter how big their accomplishments. Some programmers go through this and some don't. My answer to this is can you build projects, can you both read and understand code that you have not written. Can you build a solid application for the platform of your choice? A web programmer would be able to create a solid website. A smartphone programmer would be able to create a few basic apps, but solid in the code. If you went through some good programming materials from start to finish using the learning by doing method, the solidity as it relates to your coding strength should be there and at this point my friend, you should be able to get a job in coding. Now I didn't say at Google or anything but you should be able to get hired.

Next blog post.
My next blog post will be about the struggles I went through while learning to code, what I did to overcome it, and the links to the resources I recommend you using. This will include, video tutorials, books, and interactive websites. Thanks for reading. See you next time. 

Thursday, July 7, 2016

Baseline Skill

When it comes to tech, I believe that baseline skills and the ability to learn, are more important than just skills alone. If a software developer knows core programming (OOP), mathematics, data structures, algorithms, and SQL, he/she should be able to learn any other associated technology rather quickly. Because the developer has a baseline knowledge and knows how to correctly use the foregoing, picking up on newer topics and trends should be a breeze.

I use this specific learning algorithm for new company related technologies.
(2hrs * WDW) +  5hrs = WST
WST * 4 = MST
The 5hrs are weekend study hours. The WDW means weekdays worked, WST means weekly study time, and MST means monthly study time. To get the monthly study time, MST, just take WST * 4 = MST. So if a person works a five day work week for one month, the MST would be approximately 60. Two months on a new job should yield around 120 hours of studying, which will normally put a new employee at a very effective spot. The reason I say approximate because of monthly length deviations in our calendars.

All study hours while using this method should be applied off the clock, unless your company is cool with it. I love learning and don't mind studying on my own time in order to keep increasing productivity.

Thursday, June 2, 2016

Never Stop Pushing

Today I finally uploaded a nice share of projects. Please feel free to view and or download them on the projects page. It took a while to complete because I first had to go through a rigorous learning program to enhance my programming knowledge from fair, to very effective.

The journey to take my knowledge to the next level was not an easy one, but truth be told, most things in life that is worth something, are not usually easy to come by. Becoming a good developer takes discipline, dedication, and determination. I read and completed quizzes, assignments and projects in multiple books. I watched and studied methods of software engineering from different video learning sources. I studied for and completed certifications from both industry and none industry providers. I have even had many nights dreaming about code in the process of bringing my skills to the next level. The most recent software I coded was the five projects. Each project brought its own challenges and rewards.

My goal is to become the best developer I can be while maintaining good physical health, and positive relationships, with friends and family. So far, this has been going well.

Thursday, February 4, 2016

Operation C#

These days I find myself doing more mini coding projects than anything else as it relates to technology. I’m currently working on The Phoenix Project, which encompasses multiple operations and subcategories, all of which involves going through some forms of programming related task.

I’m currently inside of Operation C#, an operation that has around 15 steps, with each step meant to be somewhat of a prerequisite for the next. Some of the steps involves another language (Java) but is mostly there to add solidity to my understanding of OOP.
Operation C# steps are below.

OPERATION C#:
Step 1.√ Study for and earn certificate  MS C# EdX Class
Step 2.√ Study Microsoft Visual C# 2013 Step by Step
Step 3.√ Study Visual C# 2012 Deitel. Video answers are here: https://www.youtube.com/watch?v=z9Q0YS6qa7g&index=155&list=PLvQSG8B7sh6n0Xeuoe_SJf7RNmeI4Mfay
Step 4.√ Study the C# OOP videos I downloaded especially the 2:43 hrs/minute long one.
Step 5.√ Study the C# Microsoft Virtual Academy videos.
Step 6.√ Study the C# OOP videos at https://www.youtube.com/watch?v=fUIizJIjBmw
Step 7.√ Study Lynda OOD videos https://www.youtube.com/watch?v=rC52T137dFg&list=PLqlI1RpjIS59ziAx7YBqQ0rtyAcpgdsjm&index=3
**Apps I already have that will be uploaded. √HealthProfileApp, √BeastForge Algo Tester, and maybe the Calorie Burner app if finished**
Step 8. √ Create C# Security+ Quiz App
Step 9. √ Create C# Health Profile App
Step 10.√ Create C# Tech Jeopardy App
Step 11.√ Create Java Student Regesteration App (This was to create a self challenge)
Step 12. Study Stanford's SQL course.
Step 13. Create C# Resume/Software
Step 14 Study the C# (70-483) Certification videos to the book. https://www.youtube.com/watch?v=RhLLxew4-TY&list=PLY0bXAvyEZcA2tnxSLoxwzadeWT8Actmw *Create videos tutorials every time I finish a chapter.
Step 15. Take and pass the C# (70-483) test.

I’m currently working inside of step 12. The main purpose for this step is to get a good review of SQL. While I do have a CIW Database certification, I do think it's still prudent to review learned skills.