Concrete Skills

This week I am writing about concrete skills. The apprentice pattern here is somewhat self explanatory. Concrete skills are what an apprentice can do for a company day one on the job. Some examples of conrete skills are basic web development, popular frameworks, and the standard library of the programmer’s language of choice. The problem is that an apprentice that has not proven himself may not be able to find a job. The hiring manager needs a reason to take a risk on this prospective employee. The solution is aquiring concrete skills. The author recommends that apprentices seek out guidance from developers they admire. And pursue 5 concrete skills on that developer’s resume. And build a toy project that demonstrates these concrete skills. I really like this idea. The author also mentions that a recruiter is more focused on the skills at this point in the journey, than the experience. Because the work experience is not software related.

I think that his is a very useful apprentice pattern. And I like that it starts before an apprentice starts getting paid to code. One thing I think could be improved is finding the important concrete skills from another developers resume. I think the more practical approach is to look at job postings to find what concrete skills are in demand right now. It is possible that a developer I admire has skills on their resume that are no longer in demand. One way that employers quantify an apprentice’s concrete skills is through a technical interview. This interview would involve basic data structures and algorithms. As well as the standard library of whichever language the candidate is interviewing with.

I have done a version of this apprentice pattern already. I have noticed that many companies hiring Full Stack Engineers are using React.js, so I decided to complete a React tutorial and a simple project over the Christmas break. I was able to but something new on my GitHub, and my resume. This process is a win-win because I am learning a concrete skill, and improving my public GitHub profile at the same time.

Apprentice Patterns Ch. 1, and Introductions

Chapter One:

My first reaction to chapter one is that I am the intended audience for this book. I am somebody that wants to create software, but I need some guidance. I also noticed that Dave did not really start to program until he was 26. So many stories of great programmers start when the protoganist is 10. So it is encouraging to see somebody that started later in life. I also thought it was interesting that Dave had to “swallow his pride” in order to become proficient in his first programming language.

One Idea I found thought provoking is that software craftmanship is the “growth mindset”, which is more about sustained effort, as opposed to natural born talent. One thing that new developers struggle with is imposter syndrome. And I believe that this mindset could be an anectdote to imposter syndrome. This idea helped me to think about software development expertise as something that is gained through effort. Which is not always what we are told in pop culture.

Introductions for chapter 2-6:

Chapter two is called I emptying your cup. This is the idea that as an apprentice, I should be open to new ways of doing things. When I start my first job, I will not have a problem accepting advise. But this is a good concept to keep in mind as I progress. The long road is about the life long journey of improving as a developer. This is an inspiring idea. It makes me feel like it is not simply about how long you have been coding, as long as we continue to practice and learn. Chapter four is about accurate self assessment. This involves focusing on self improvement over being the best, or being better than average. This chapter sound interesting, because this is advice that I have heard in many aspects of life. So I am interested to see how the author relates this wisdom into software development.

Chapter five is called Perceptual Learning. I believe what the author is getting at is “learning how to learn”. This chapter stands out as being the most useful to me. No matter what stack I end up using at my first job, I will not know everything that I need for the job. So the ability to effectively learn on the job is crucial. Chapter six is about Building your own curriculum. In which the authors talk about the importance of books over internet resources. This may be the only thing I disagree with so far. In my experience so far, online resources like documentaion, tutorials, and stack overflow are more helpful than programming textbooks. But I could be wrong, I certainly don’t want to go into this book with a full cup.

Theas Pantry Technology

This week, wrote about the technologies we will be working with if we are for the Theas Food Pantry projects. I thought this topic would be intersting, because it will impact what we will be doing on a daily basis during the course. The technologies I will describe today are OpenAPI, Vue.js, and Express.

For the api layer we will be using OpenAPI. OpenAPI is used to create, produce, and comsume RESTful web services. OpenAPI is written in a machine readable format, JSON or yaml. The front end uses Vue.js. Vue is a JavaSript framework used to create a front end for web applications. It uses the model view framework is used to create dynamic, user friendly UI. Express.js is what Theas food Pantry uses for their backend. Express is considered by developers to be the standard when it comes to Node.js backend frameworks.

Libre Food Pantry Misson

This week I decided to write about the Libre Food Pantry’s mission. I was interested in this topic because it gives myself, and the class as a whole an idea of what we are working towards this semester.

The community of Libre Food Pantry furthers humitarian causes, while furthering computer science education. The mission of Libre Food Pantry is to teach computer science students that software can be used for social good. This makes me feel excited to get started.

Libre’s mission is something I can definitely get behind. Many computer science students gravitate towards FAANG, and other big tech companies as they graduate. But I think working with Libre Food Pantry can be a reminder that a computer science education can be used at a variety of companies and causes that may not seem as obvious at first.

Getting Started with Axios

https://www.sitepoint.com/axios-beginner-guide/

This week I decided to write about Axios for JavaScript. We are using Axios on our front end. So I thought it could be helpful to read an article about Axios, and learn more about what Axios does and how it works.

Axios can be used on backend node.js applications. And used in JavaScript files/ frameworks like Vue, React, and Angular. One of the most common uses of Axios is making HTTP requests to send, receive, or save data. Data passed in post operations is conveniently sent in JSON format. Below is an example of an axios HTTP request method.

axios({
  method: 'post',
  url: '/login',
  data: {
    user: 'brunos',
    lastName: 'ilovenodejs'
  }
});

Axios also has a convenient way to receive responses. Axios returns a promise that is either a response or an error method. A response object is returned with a successful call, and the .then() function is called. The response object has data, which is the payload in JSON. The status in the form of an HTTP code. The status text, which is an HTTP message. Headers, returned by the server. The original request information. And the HTTP request in the XMLHTTPRequest object format.

If an Axios request returns an error, the promise will be rejected and an error object is returned. An error object includes: an error message, a response object, a request, and the original request.

axios.get('/product/9')
  .then(response => console.log(response))
  .catch(error => console.log(error));

To better understand Axios, it is worth explaining what a JavaScript promise is, and why programmers use them. Promises are used to handle asynchronous functions in JavaScript. Promises may return a value or payload, or an error message. Each promise has a state. A promise can take three different states. fufilled, rejected, and pending. In the code below process will not execute until fetch executes. And handleErrors will not execute until save has executed. .catch will handle erros within process() and save().

fetch(url)
.then(process)
.then(save)
.catch(handleErrors)
;

Axios, and promises in general are important pieces of software development today. When using the microservice architecture. Sending and receiving data is an essential function of each service. And Axios and promsies help developers do just that. Axios and promises work asynchronously meaning that they can run different parts of the program simultaneously. This is another important concept because sometimes differrent parts of a web page load asynchronously. So an asynchronous method could render the first available piece of data.

Resume’s For Software Engineers

https://www.hackreactor.com/blog/6-tips-for-a-software-engineer-resume-that-gets-you-hired

In order to use the skills we are using in class in a professional capacity. students need to land a job as a Software Engineer. The first step in this process is sending a resume to a potential employer. There are some good resources out there online, and on campus about resume building. And that is a great place to start. But this article focuses on Software resume’s in particular. A Software Engineer resume should be broken into experience, education, skills, and projects.

One important part of any resume is a job history. In the case of new developers it may not be necessary to give a long, detailed employment history. This is because not all of applicant’s past jobs are related to software development. In my case. I have one internship. And I list two unrelated jobs. But I don’t go into detail of the unrelated job responsibilities. A unique part of a software resume is a project section. This is important for new engineers that do not have an extensive software job history. Employers like to see personal projects because personal projects show the employer that the applicant is passionate about building software. The education piece of the resume is fairly straight forward. The applicant should just write down their university, area of study, and GPA (assuming the GPA is reasonably impressive). The skills section is also straight forward. The applicant should list programming languages, frameworks, and other tools they have used in internships, classes, and personal projects. I personally do not include “fluff” skills like attention to detail, written and verabal communication, etc.

Another helpful tip is to consider ATS software. ATS stands for Applicant Tracking Software. This is an AI that looks for keywords and send resumes that match those keywords to recruiters at the comany. The author recommends using a simple format, and not including impages or tables in the resume that could trip up the ATS. Applicants can identify keywords used by the ATS in the job posting. A resume that has keywords from the posting is more likely to be seen by a recruiter. This leads to the final tip. Applicants should tailor their resume to the job posting using the skills and wording from the job posting. This can be time consuming, but in my opinion this is worth the extra time. One thing that I would add is that I don’t add skills that I don’t actually have. If I make it to the interview by adding skills that I don’t actually have. The interviewer will ask me about those skills, and will quickly learn that I was not honest. This article was very helpful for me. And I hope that some of you find my summary and opinion helpful in your respective job searches.

Coding Interviews

https://levelup.gitconnected.com/the-ultimate-guide-to-coding-interviews-b11fc1efc9b2

This week I chose to write about coding interviews. The reason that I chose this topic is that the coding interview is an essential part of a software developers career. A student can finish a Computer Science program, go to a bootcamp, or finish an open source program. But if they can’t pass a coding interview they will not be able to get a job as a Software Engineer.

The article that I chose summarizes the types of questions and topics that comapanies test candidates on. And includes some resources to help candidates perform well in their interviews. Before a candidate can prepare for the specifics of an interview they have to be somewhat proficient in a high level programming language such as Java, C++, or Python. Most interviews focus on Data Structures and Algorithms. So Computer science students have a good head start on that. The article recommends GeeksForGeeks to learn more about Data Structures and Algorithms, or as a refresher for candidates that are already familiar with Data Structues and Algorithms. I personally use GeeksForGeeks pretty much every time I am coding and learning a new concept, or need a refresher. The articled also recommends the LeetCode top interview questions collection. I am personally working my way through this course now. The next step is to choose some companies, and solve problems that other interviewees were asked. The final step is to start applying and interviewing for Software Engineer roles.

I enjoyed this article, and I think it is helpful for new Engineers like myself looking for their first job. Personally, I have mixed feelings about the coding interview process. I originally thought that a CS degree with a decent GPA and some internship experience would be enough to land an entry level Software job, but that simply is not the case. Those qualifications can land a candidate an interview, but from there the candidate needs to code their way into an offer. One common complaint about the interview process is that the types of questions and Data Structures that come up in interviews are almost never used in the industry. On the other hand, companies need a way to determine if candidates actually know how to code. If a candidate cannot complete a simple Fizzbuzz question, they probably won’t be a strong contributer. Algorithm efficiency is also an important part of the interview process, and writing efficient code is extremely important in the industry. Regradless of my opinion, mastering the coding interview is part of being a Software Engineer. And preparing for interviews has made me a stronger programmer, and problem solver.

REST APIs

I chose to write about REST APIs this weeek, because we are covering them in class. And because REST APIs are ubiquiutous in Software Development these days. Application program interface or APIs are a a way of sending data between services over the internet. APIs have become popular because they allow companies to use already available tools like email automation, username and password validation, and payment processing to other established services. This allows developers to focus on the unique business demands of their customers and products.

In web development the client is the service or person making requests to access the data within the application. Most often, the browser is the client. A resource is a piece of information that the API can provide for the client. A resource needs to have a unique indentifier. A server receives and fufills client requests. REST stands for Representational State Transfer. When the client requests a resource from the API it comes in the reource’s current state, in a standardized representation.

At my job we have one workflow problem that could be swolved with an API. We have a client side web application where customers place orders, and an internal desktop application where we keep track of primers needed for those orders. The internal desktop application is called the primer log. The client application is a web application, but the internal application is not. This causes our company all kinds of problems. My coworkers will often say “I wish these services could talk to eachother”. And that is exactly what an API does. Our internal application is keeping track of which primers we have, where they are, and which are dry. But the customers cannot see that. Customers will frequently request that we use primers that we do not have onsite.

We will eventually recreate our primer log as a web application, which would allow our client web application and our primer log to communicate. So when a customer requests we use a primer, that would be a client request for a resource from the API. The API would check our internal primer log, and send a response back to the client indicating whether or not the requested primer is onsite. This API response could prompt the client to order the required primer if we did not have it onsite. That is ROI, not to mention the time it would save my team, and the turn around time for our customers. This is just an example of how an API can solve a real life business problem.

MVC Design Pattern

Source: https://www.geeksforgeeks.org/mvc-design-pattern/

The Model View Controller pattern is a common design pattern used in web development. I chose to write about the MVC design pattern this week, because I have experience using it, but at the time I did not realize that I was using a design pattern. At that point I was not familiar with the idea of a design pattern, or the extent to which they are used in Software Develpment. My thought is that doing some intentional study of the topic will solidify my knowledge. My experience with MVC was in ASP.NET Core. But some other popular MVC frameworks are React, Angular, and Laravel.

With MVC the data model, application data, presentation information, and control information are seperate objects. The Model contains application data, and does not present the data to the user. In my experience these Classes contained data like barcodes and timestamps. But did not have methods that manipulate the data, define API methods, or a present a UI. The Controller Class is an intermediary between the Model classes and the View Class. The Controller Class contains methods that execute on Models. In my experience, I mostly used Controllers for API calls. These API methods uploaded text files to a database with an HTTP post method, and retrieved JSON data with a HTTP get method. The View Class prescents the data to the user. In my experience I used .Vue files to present data. The View files instanced of Models, presented as JSON objects, and the Controller contains API calls that allowed the transfer of data from the Model to the View.

Like all Design Patterns in Software Development there are advnatages and disadvantages to the Model View Controller pattern. Some Advantages are that multiple developers can work simultaneoulsy on the model, controller and views. Another Advantage is the MVC allows for logical grouping of data. And Models can have more than one View. Some disadvantages is the added layer of abstraction can make working on and navigating the service to be complex. I ended up tracing methods from class to class, using built in Visual Studio tools, because remembering where the method I was looking for became cumbersome. Using the MVC design pattern creates many files, because each layer of every feature of the service has a Model, Controller, and View. With all that being said, I still think that the MVC pattern is great for meduim to large scale services.

JavaScript and JavaScript Frameworks

Source: https://trio.dev/blog/javascript-framework

I chose to write about JavaScript frameworks this week, because they are so common in development today. And we will be covering Vue.js in this course. JavaScript is the most popular programming language. And it has been that way for many years. Web browsers can compile JavaScript natively so a user does not need to download a seperate piece of software to view the website. Because JavaScript is so ubiquitous, and building websites can be very time consuming, developers started to create JavaScript libraries and frameworks to make the process easier. Frameworks are so prevalent that using JavaScript without a framework is commonly referred to as “Vanilla” JavaScript.

I spend time every week looking at Software Engineer roles on linkedIn, and most companies want candidates to know JavaScript. Many companies mention React, Angular, or Vue. Some posts simply say JavaScript. But I suspect that some of these companies also use a JS framework, but the person that wrote the posting may not know the nuances of Software Development.

A JavaScipt framework contains pre-written JavaScipt code that is commonly used across many web applications. Some examples are creating a header, or accessing an API with HTTP methods and Axios. The terms JavaScript library and framework are at times used interchangeably. But there are some differences. A JavaScript library uses specific functions from parent code. But a framework defines the structure of an application using already written, reusable code. JavaScript frameworks have become popular because they save teams time, which saves money.

The JavaScript framwork I am most familiar with is Vue.js. I used Vue to create a dynamic web page for my internship. I am not very experienced with front end web development, and mostly worked independently. So this was quite challenging. But using a framework made things easier. with Vue I displayed JavaScript Objects or JSON data with V-for and V-if statements. Anybody that knows how to use for loops and conditionals could figure these out. But what is different about V-for is that I could conditionally render HTML elements. A good example would be if an array’s length is not zero, display the array. And with V-for you can dynamically diplay elements, from an array or an object in Key value pairs, just keys, or just values. Vue allowed me to display an HTTP in response in JSON format using V-if and V-for loops. This would not be possible using just HTML and CSS.

Companies are trying to find ways to create software and web applications faster. And JavaScript frameworks can help them achieve this. Personally, I am looking forward to learning more about JavaScript frameworks in the next two semetsers, and in my career.