<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ndy</title>
    <description>The latest articles on DEV Community by Ndy (@ndy40).</description>
    <link>https://dev.to/ndy40</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F135977%2F6f2f626f-86b5-48f2-94ab-cca8493fd0d5.jpg</url>
      <title>DEV Community: Ndy</title>
      <link>https://dev.to/ndy40</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ndy40"/>
    <language>en</language>
    <item>
      <title>Learnt to code, learnt the framework, landed the job - what next? </title>
      <dc:creator>Ndy</dc:creator>
      <pubDate>Thu, 19 Nov 2020 09:19:47 +0000</pubDate>
      <link>https://dev.to/ndy40/learnt-to-code-learnt-the-framework-landed-the-job-what-next-4m90</link>
      <guid>https://dev.to/ndy40/learnt-to-code-learnt-the-framework-landed-the-job-what-next-4m90</guid>
      <description>&lt;p&gt;I recently had the opportunity to be conducting interviews since we were looking for more developers to join our small PHP + (1 Python) developer team. We wanted a mix of Permanent and Contractors. The contractors were hired to get a few pressing features out of the way to be quarterly goals. &lt;/p&gt;

&lt;p&gt;I usually conducted the first level interview of getting to know a developer and if they come across convincing enough, we proceed to the second stage which depending on whether they are Permanent or Contractors involved pair programming or architecting a solution to a problem we had.&lt;/p&gt;

&lt;p&gt;After several weeks of having these interview sessions, I observed something about learning ecosystem in the development space. There is an endless supply of HOW TO knowledge and very few of WHY and WHEN type of knowledge. &lt;/p&gt;

&lt;p&gt;When interviewing, I noticed that a lot of the contractors wrote code, had a lot of working experience but didn't seem to subscribe to Programming principles. Yes, they did their thing, maybe got the code working and left but how maintainable is the work they have done? &lt;/p&gt;

&lt;p&gt;The primary framework we use is Symfony and if you have a months worth of Symfony experience, you will definitely come across the use of Repositories and Services. As a matter of fact, the SOLID principle is something at some point you will need to be aware of. Some will say Symfony developers are purist and I use to say that but now I feel I understand why and maybe becoming one of them as well with good reason. &lt;/p&gt;

&lt;p&gt;One of the questions we ask is fetching data from a CSV file and being able to filter the contents of the file according to business rules, what layers of your code will be responsible for what? Even before working on simple I did hear about SOLID and tried to learn what it meant, I never understood all of it at one point especially the L and I but Single Responsibility Principle at least got nailed down. This question surprisingly tripped a few candidates up. The worst bit is having a candidate litter their CV with all sorts of abbreviations like BDD, DDD, MVVM. When the said candidate was asked what is the difference between TDD and DDD? He sort of described TDD as testing first and DDD as testing after. &lt;/p&gt;

&lt;p&gt;I also observed that people who seemed to have worked in more permanent roles for a longer time in their career faired better in principle-based questions. Could it be because they had to spend years maintaining the systems they worked on?&lt;/p&gt;

&lt;p&gt;One might argue, well you don't need to be an expert in theories, it is about practicality. I feel there is time for enough theory and practicals. Practicals without a theoretical foundation is akin to using that single hammer for every nailing job in the house. Theories come first then practical application afterwards.&lt;/p&gt;

&lt;p&gt;Being able to distinguish when to use one approach over another will depend on the knowledge and principles governing each approach. In an object-oriented language, we have design patterns, we have fundamental OOP concepts like polymorphism, encapsulation etc but when you have Abstract classes all over the place as a mean to share re-usable code without really understanding the principles behind it. When do you use an Interface, an Abstract class or when will a Decorator pattern benefit you the most?&lt;/p&gt;

&lt;p&gt;For learning purposes, it is good practice to not focus on the HOW but also look at the WHY and WHEN. There are a lot of Youtube videos that quickly show you how to do a thing, however, I find books to really contain a lot of information that would need days of youtube videos at a stretch to cover (video editing is hard). &lt;/p&gt;

&lt;p&gt;I understand that we all have different ways to learn but would you shy away from a goldmine because it is located in a place you don't feel comfortable with? I have had to get back to my books and plan to read them from cover to cover. Going back to the basics I say to myself. Getting back to the fundamentals that transcend the latest framework. Frameworks will come and go but the principles remain the same.&lt;/p&gt;

&lt;p&gt;My current reading list at the moment is - Clean Code and Clean Architecture by Robert C. Martin (Uncle Bob). I have watched a few of his talks, taken notes of the points he highlighted but reading the book has a lot more. I am now more conscious of simple things like function naming, make sure the code is easy to comprehend I don't necessarily need to litter my code with comments to explain what it is doing. This is also something we strive for within our team during code review sessions. &lt;/p&gt;

&lt;p&gt;A good resource for learning about Design Patterns and when to use them is &lt;a href="https://refactoring.guru/refactoring"&gt;https://refactoring.guru/refactoring&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have also been looking out for materials on Git especially around commit messages practices and found a couple of videos and even attended a few workshops on them. We can't keep writing git commit messages that sound like - "SOME CHANGES"&lt;/p&gt;

&lt;p&gt;I hope this encourages you to look back and ask why you do what you do? Why your project structure is the way it is, are there principles governing your approach? Do you do what you do because you saw someone do it that way? &lt;/p&gt;

&lt;p&gt;I will never call myself an expert but I am always keeping an eye out for best practises, patterns used by others and if you have any reading materials worth mentioning please share. &lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>Experience is all about learning and opportunities</title>
      <dc:creator>Ndy</dc:creator>
      <pubDate>Sat, 15 Feb 2020 16:32:46 +0000</pubDate>
      <link>https://dev.to/ndy40/experience-is-all-about-learning-and-opportunities-374n</link>
      <guid>https://dev.to/ndy40/experience-is-all-about-learning-and-opportunities-374n</guid>
      <description>&lt;p&gt;I found myself voicing these words while in the middle of a video interview.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Experience is all about learning and opportunities to apply the lessons.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the field of technology, new tools, discovery or standards get released and adopted at a rapid rate, leaving us in a position of always learning. Unfortunately, from a business angle, we can't still be chasing after the new shiny. We also have a responsibility to our customers to continue rendering the services we promised them while exploring new tools, practices and technologies.&lt;/p&gt;

&lt;p&gt;When applying for a job, there is usually a list of experiences your future employer is hoping you have to be considered qualified for a role. For a typical expectation of a Senior PHP Developer, outside the usual SOLID principle knowledge, Framework experience, you are also expected to have infrastructural knowledge like Docker and to work with a myriad of AWS services.&lt;/p&gt;

&lt;p&gt;In reality, not all companies have the same structure. Most companies have dedicated teams to manage several aspects of the business. Unless you actively work with/in the operations team, your exposure to how these systems work is limited. Also, running the operations of a business is pretty much a field in its own and requires focus.&lt;/p&gt;

&lt;p&gt;When looking at roles for DevOps engineer, I never see requirements asking about programming frameworks, preferably a few scripting languages and orchestration tools. A few AWS professionals I have met are okay developers. They can pretty much build projects in any programming language of their choosing and effectively scale it to handle billions of requests daily.&lt;/p&gt;

&lt;p&gt;I am seeking answers on how to build capabilities for future or trending tech when you don't use it in house. Also, I realise that not actively working in a role that requires this future tech isn't considered experience and the term used is "commercial experience".&lt;/p&gt;

&lt;p&gt;Since every business or company is different, the truth is the role of Senior Developer varies based on the business's needs. Some companies want a senior developer with a vast knowledge of tech, be a leader and be in a mentor to others - managerial skills. Other places want more technical skillset than administrative since they have a Technical Team Manager. As you can see, the market is varied and diverse.&lt;br&gt;
The good thing about our tech industry is, as long as you are good at something, there is probably someone out there that needs your skillset. Just ensure to keep up with the times and don't lag.&lt;/p&gt;

&lt;p&gt;Every tech is available to be learned, and as part of growing and gaining experiences, you will come across technical challenges that will require you to scale up your stack. The problems may also be process-driven, delivering projects with overlapping timelines and whatnot.&lt;/p&gt;

&lt;p&gt;If you do have ideas on how one could learn a future tech and gain enough experiences that could be considered valid enough, do share if you please.&lt;/p&gt;

</description>
      <category>developer</category>
      <category>jobsearch</category>
      <category>softwareengineering</category>
      <category>hiring</category>
    </item>
    <item>
      <title>Beyond Code In 2020</title>
      <dc:creator>Ndy</dc:creator>
      <pubDate>Sat, 28 Dec 2019 09:10:37 +0000</pubDate>
      <link>https://dev.to/ndy40/beyond-code-in-2020-2909</link>
      <guid>https://dev.to/ndy40/beyond-code-in-2020-2909</guid>
      <description>&lt;p&gt;It is that time of the year, and in a few days, we will be welcome the year 2020. Like all other years previously, people (including my humble self), have always looked forward to the new year. The new year will be excellent, we will hit the gym, learn ten programming languages and be an all-out better person and if all goes well, maybe gain some superpowers in the process. &lt;/p&gt;

&lt;p&gt;When I look at 2019, it has been for me a year of striving for stability. 2019, is the year I got married, moved house, started a new job and surprising as life would have it, I had to deal with a health situation. It has been a year of exploring different technologies like functional programming (Scala, Kotlin and F#), picked up Dart/Flutter as my one path to the mobile echo system. The year has also been a year I finally opened my heart to the Python programming language, and I am enjoying it. &lt;/p&gt;

&lt;p&gt;Looking around 2019, there were a lot of innovations, a lot of social media fights and for the most part, I have been watching, observing, lurking in the corner and picking lessons from the actions of others. It has also been a year I have slightly gotten bored with coding.&lt;/p&gt;

&lt;p&gt;On the last part, I am not bored with coding. I recently started asking questions like - Do we really need to have a standup every morning? What are the measurable impacts of having a standup every morning? What if we did it every other day instead? How can I get people to think of what we do as actions to attain a vision rather than a Job we do to gain points during appraisals? &lt;/p&gt;

&lt;p&gt;Its been a year of people thoughts and challenges for me and as 2020 approaches, I have a general sense of what to work on and realised 2020 is a year of &lt;em&gt;BEYOND CODE&lt;/em&gt;. I think I will be less technically smart and may not pick up a new framework, language but will focus more on problem-solving and people. &lt;/p&gt;

&lt;p&gt;The year 2020 will be a time I equip myself more with knowledge from non-technical books and maybe read more fiction novels (I do struggle to read novels). Over the course of the year, I did buy a few books with the hope to read them but never got around to it. So below is a list of books I am hoping will get me to Utopia in 2020: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Rules of People&lt;/li&gt;
&lt;li&gt;The Rules of Management&lt;/li&gt;
&lt;li&gt;The 360 Leader&lt;/li&gt;
&lt;li&gt;Sacred Marriage (I still have to deal with people in my personal life outside work -- 😁)&lt;/li&gt;
&lt;li&gt;Clean Code by Robert C. Martin&lt;/li&gt;
&lt;li&gt;Engineering Maths (My maths has gotten worse over the years due to lack of application. Need to sharpen it again). &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apart from gathering head knowledge, I think a fundamental principle is finding a good balance in life. My mum said this while growing up that: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Each week make sure you satisfy the different aspect of your life namely: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Physical&lt;/li&gt;
&lt;li&gt;Career&lt;/li&gt;
&lt;li&gt;Spiritual &lt;/li&gt;
&lt;li&gt;Relational&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;And I feel I need to make a conscious effort to keep the above in mind. Hopefully, I get some improvement personally and also make the lives of others around me better. &lt;/p&gt;

&lt;p&gt;Let me know what you think and what your thoughts are for the new year 2020. &lt;/p&gt;

</description>
      <category>newyear</category>
      <category>2020</category>
      <category>personal</category>
      <category>life</category>
    </item>
    <item>
      <title>You should apply CI/CD with your personal projects as well</title>
      <dc:creator>Ndy</dc:creator>
      <pubDate>Thu, 31 Oct 2019 21:08:06 +0000</pubDate>
      <link>https://dev.to/ndy40/you-should-apply-ci-cd-with-your-personal-projects-as-well-5dke</link>
      <guid>https://dev.to/ndy40/you-should-apply-ci-cd-with-your-personal-projects-as-well-5dke</guid>
      <description>&lt;p&gt;Sometimes when we think of advance concepts like CI/CD, we generally look at it from the perspective of work. It is easy to think of applying such principles at work maybe because you are being paid more or it is part of your professional experience. We, however, fail to apply such processes on our personal projects. &lt;/p&gt;

&lt;p&gt;I recently did a switch on my website by intentionally trying to apply continuous integration and deployment (CI/CD) when making changes to my site. I wanted to stop using FTP to upload my site. My blog doesn’t attract a thousand people per day but I do hope to keep it running and write for years to come. One voice will say, what is the point? It isn’t big enough to warrant such sophistication. I still went ahead and did it and here are the reasons to apply CI/CD to your hobby project no matter how small and unsophisticated it may be. &lt;/p&gt;

&lt;h4&gt;
  
  
  Acquiring new skills
&lt;/h4&gt;

&lt;p&gt;If you are someone who is interesting in growing in the field of IT, you probably know the field is always changing. Every week there is a new framework, a change in processes, a change in the toolchain and there is always a new best practice introduced in the industry. To stay relevant and still get that good pay package, it is imperative to continue learning. CI/CD is the new norm and apart from being trendy, it does bring benefits. Unfortunately, not every company is able to adopt it from quickly enough, and it does take time to adopt for a company that has been in existence for years. &lt;/p&gt;

&lt;p&gt;Consider a future were you need to change jobs and you are asked by a potential employer if you do CI/CD? You now consider picking a quick course to fill up that gap and you know you still need hands-on experience or practical projects to demonstrate this newly acquired skill. &lt;/p&gt;

&lt;p&gt;My website does adopt some aspect of CI/CD and as I roll out more features, I get to gain experiences that I can also contribute back to my place of work. So guess who has CI/CD on their CV now? &lt;/p&gt;

&lt;h4&gt;
  
  
  Streamlining your workflow
&lt;/h4&gt;

&lt;p&gt;As developers, you want to focus on doing what you love best, writing code that offers solutions to opportunities you are interested in. Pushing out code that displays that amazing interface you want to impress your clients or visitors to your site. With CI/CD, you can take away the repetition in your workflow - no more FTP to a remote server, automatically rolling back changes to code. &lt;/p&gt;

&lt;p&gt;I currently use the Bitbucket pipeline to deploy my website and it has been freeing. Once I am done testing a feature locally on my machine and I push it, I just wait to be notified of failures to running tests or the deployment process. It is rewarding when you finally get that email saying - “branch deployed successfully”. It has also helped me split the task of managing my site into a few categories - Admin Task, Frontend and Writing. Streamlining your workflow helps you document your project. &lt;/p&gt;

&lt;p&gt;Having a structured workflow and automated workflow helps you to think through what you are doing. How things should fit and work together. Using a tool like a pipeline means anyone joining you can learn about the system by reading up the documentation from your CI/CD providers site or tool documentation.  Even when you go mad and decide to write your own custom CI/CD system, you are still creating a structure and as long as you aren’t inventing a new programming language for that, people can look at your implementation and figure how things work. &lt;/p&gt;

&lt;h4&gt;
  
  
  Bridging the divide between Operations and Developer teams
&lt;/h4&gt;

&lt;p&gt;In most organisations, the Operations and Developer teams are separate and each isn’t really aware of the nature of the other’s job. Developers may see the Operations team as the people who manage the servers and add more memory and storage when ordered to. The Operations team, on the other hand, may see the developers as the code junkies who write buggy code that crashes or puts the server under load. While the code may work on the developer's machine, there may be differences in the server that the development team isn’t aware of. &lt;/p&gt;

&lt;p&gt;The operations team may not also be aware of needed resources that may be required by a new feature deployed by the team. This means after a release when the code is all in production, the fire alarm goes off and we discover the need for more resources, closing out possible security vulnerabilities. &lt;/p&gt;

&lt;p&gt;Acquiring a CI/CD skill from your personal project means you get to understand the kinds of tasks undertaken by the operations team. This means you can be sympathetic to their plight and can easily way in to help solve certain operations task. I think full-stack development should include CI/CD and not just stop at knowing HTML, CSS, JavaScript and SQL Queries. &lt;/p&gt;

&lt;p&gt;In summary, all I am saying is that applying CI/CD to your personal project is awesome and in the process, you acquire a reasonable skill to augment your current one. &lt;/p&gt;

&lt;p&gt;Cross-posted from: &lt;a href="https://ndifreke-ekott.com/applying-ci-cd-workflow-to-my-site/"&gt;https://ndifreke-ekott.com/applying-ci-cd-workflow-to-my-site/&lt;/a&gt;{: rel=canonical}&lt;/p&gt;

</description>
      <category>programming</category>
      <category>automation</category>
      <category>continuousdeployment</category>
      <category>ci</category>
    </item>
  </channel>
</rss>
