top of page
Writer's picturePaul Powers

Decoding the Developer's Path: Easy Starts with Python, SDLC Mastery, and Beyond!


Content within this article:



 

Software Development, with Python - is it as hard as you think? Short answer, "No!" - However, if you never start, then you will never know, and you may also continue to fear it.


I became a student of computing back in the 90s. Prior to that I had only used computers, for drawing on, or gaming: Atari, Commodore 64, Sega Game Gear, all borrowed from neighbours or cousins. Later, Santa Clause brought me a Nintendo Entertainment System (NES). Although, it didn't last long as my dad smashed it on like day 2 of owning it, simply because he couldn't play Mario properly without falling down the gaps and took it out on the system. I had to wait a few years before my parents separated and then divorced before he bought me a Sega Mega Drive 2. For some reason, he later took that back and replaced it with a Sega Mega Drive original. Childhood was very confusing for me. Anyway, I digress. I had the Sega for a while and then I made a trade with a kid from my year group for a Super Nintendo Entertainment System (SNES), later trading that up for a PlayStation 1 (PS1). I did well to make these deals. Between the SNES and the PS1, this is when I undertook the journey to not only play games but to create them. I focussed on Art and IT and little else. Where the two interests crossed paths, drawing on a computer, this was where my interest piqued. I remember being shown around high school for the first time and talking with the art teacher Mr Condron, asking him, "Can we use the computer to do animation?", he replied that this wasn't feasible, and thinking about the time period and the capabilities back then, he was right. It didn't stop me from being brutally disappointed. I knew I wanted to do this, and this was 2-3 years before Toy Story was even a thing.


Instead of trying to go any further with animating on a Mac in the art class, or on a PC in the IT rooms, I took to focussing on learning how to use a computer to get a job after school. I knew that computers were going to be a huge part of the future of everything. I could feel it. So, I began my journey by taking GNVQ IT (now commonly referred to as ICT) whilst in high school. After high school, I pursued learning more about computing at college, as I was consistently good at it, and really enjoyed it. In fact, it was the only topic coming out of high school that I was recorded as having any aptitude for. I had failed in everything else. I had to make that ground up much later.


Later in 2003, I looked into the humanities, completing GCSE's and A-Levels I missed out on, and then in 2007, I headed back towards technology as I began a foundation degree (FdSc) in Games Design and Development. After which, I completed a degree in Interactive Design (BSc hons), then a teaching degree (PGCE), a master's in advanced computer science (MSc), and most recently, I completed an Executive Master of Business Administration in Strategic Leadership (EMBA). I'm currently hoping to commence level 8 study in AI safety (PhD) this year and I'm awaiting the outcome of an application I have been working toward since January.


However, throughout all of this, I always feared coding and leant into design. Obviously, there is no escaping coding, especially doing a master's in computer science and then teaching computer science topics for a decade and a half. It didn't stop me ducking and weaving and procrastinating and hiding from coding as if I was the Road Runner and coding was Wile E. Coyote. Well, after all this time, I've got to tell you - the wild prairie dog has finally got his bird. My fear stemmed from high-school bullying about my ability to do math effectively. In infant and primary school, I was the top of my classes for math but during the troubles of my upbringing I became lost at school due to absences and somewhere along the lines I found myself missing major concepts and struggling to scrape by. Concepts that today I no longer fear or remain confused by. Like many people, I had this idea that I was "bad at math". Due to this idea a fear grew within me, and as an extension of that fear, being told that coding contains a lot of math, I automatically counted myself as a failure in that field too. Well, nothing could be further from the truth. I'm not bad at math and I never was. I merely lacked confidence and direction and support. Thankfully, with playing games, using online resources and never giving up, in addition to changing my thinking about math from being some difficult set of mysteries only for the smart, to a series of problems and puzzles to be conquered, then did I manage to turn around from math zero to coding hero!


If you have any of those same fears, find a way to set them aside, you can do this too! In this post I'm going to show you some free tools that you can use to help you to get started.


Software development refers to a set of computer science activities that are dedicated to the process of creating, designing, deploying, and supporting software.

IBM (no date) Software Development. Available at: https://www.ibm.com/topics/software-development (Accessed: 26 March 2024).


Over the past ten weeks (10/14), I've had the privilege of guiding three cohorts through an immersive journey into the world of software development. Together, we have sampled Python foundational knowledge, SQL, cyber security, database development, networking concepts and so much more. We did this as we worked towards increasing their understanding of software development and improving their employment prospects and their abilities within computer science and programming with the aim of widening the range of roles that they can apply for.


This period has been a profound exploration of the intricacies of coding, the beauty of problem-solving, and the power of collaborative learning. Today, I want to share the essence of our journey, the curriculum that structured our path, and the languages that became our tools for crafting solutions.


Most importantly, I wish to encourage you to begin your journey to become a software developer. Presented below is an overview of the key concepts of python programming and software development. I hope you find the information useful and that you will feel more confident to begin in this exciting endeavour.


The Curriculum: A Comprehensive Blueprint

Our expedition began with a foundational understanding of software and its development process. We delved into the various types of software, exploring their roles across different industries and the significance of data types, security, and the impacts of software failure. The importance of software in solving real-world problems set the stage for a deeper dive into the technicalities that followed.


The Software Development Life Cycle (SDLC) served as our roadmap, guiding us through the conceptual and practical aspects of creating robust software solutions. We examined the Waterfall model and Agile methodologies, learning to appreciate the structured yet flexible approaches to development these models offer.


The software development lifecycle (SDLC) is the cost-effective and time-efficient process that development teams use to design and build high-quality software. The goal of SDLC is to minimize project risks through forward planning so that software meets customer expectations during production and beyond. This methodology outlines a series of steps that divide the software development process into tasks you can assign, complete, and measure.

Amazon Web Services, Inc. (no date) What is the SDLC?. Available at: https://aws.amazon.com/what-is/sdlc/ (Accessed: 26 March 2024).


The video below demonstrates the software development life cycle (SDLC) details including key activities, roles and responsibilities and more. Check it out and pause it at key points to read through the detail. Contact me if you would like a copy of these slides.


Programming fundamentals were at the heart of our curriculum, with Python and Java as our primary languages. These languages opened doors to understanding basic programs, data structures, algorithms, and best coding practices. Through hands-on projects, we brought concepts to life, translating theoretical knowledge into tangible applications. We also looked at HTML, CSS and JavaScript.


 

Web development introduced us to the trinity of HTML, CSS, and JavaScript. Creating static websites and incorporating user-responsive elements, we ventured into the digital realm, crafting interfaces that marry functionality with aesthetics.


Here is an example of a simple webpage that we created using Notepad and accessed with Edge. You can see the webpage instance on the left and the Notepad entry on the right.


Here is the HTML I used to create the webpage. Proper indentation is crucial for the readability of your HTML code. Here's how the code should be indented:

 
<!DOCTYPE html>
<html>
<body>
<h1> My Favourite Things</h1>
<p> This web page is about my favourite things.</p>
<h2> My favourite foods </h2>
<ul>
<li> Pizza </li>
<li> Kebabs </li>
<ul>
<li> Hamburger </li>
<li> Beefburger </li>
<li> Cheeseburger </li>
<li> Chickenburger </li>
</ul>
</ul>
<ol>
<li> Donut </li>
<li> Cookie </li>
</ol>
<iframe width="560" height="315" src="https://www.youtube.com/embed/fl96UDyIwig?si=50Lw0sEyeotKjZYL" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</body>
</html>

You try it now! Why don't you copy and paste this into your version of Notepad, save it as a .html file and then open it with your browser?


 

As we progressed, software design and architecture taught us to evaluate design patterns and their impact on software quality. We learned the critical role of good coding practices and version control with Git in maintaining and updating code, ensuring our creations were not only functional but also adaptable.


Database management underscored the importance of structured data storage and retrieval, while UI/UX design sessions empowered us to envision and create interfaces that resonate with users, enhancing their digital interactions.

Our curriculum also emphasized software security, from identifying vulnerabilities to implementing best practices that safeguard digital assets. Testing and quality assurance ensured that our software not only met functional requirements but also adhered to the highest standards of reliability and usability.


The Languages and Technologies: Tools of the Trade

Python and Java stood as our pillars, offering a versatile and powerful toolkit for tackling diverse challenges. HTML, CSS, and JavaScript brought creativity to our code, allowing us to weave functional beauty into our web designs. Git provided the backbone for collaboration and version control, a critical component in modern software development.


Reflections and Revelations

Teaching these cohorts has been an enlightening experience. Each session was a reminder of the ever-evolving nature of technology and the perpetual learner in all of us. The enthusiasm, curiosity, and perseverance of each participant fuelled our collective journey, making every challenge a milestone.


Looking forward, the journey with our cohorts is far from over. In the next four and seven weeks, respectively, we will delve into the most transformative phases of our program: completing industry projects and earning vendor qualifications. This period is designed to bridge the gap between academic learning and real-world application, a crucial step for any aspiring software developer.


Industry Projects: A Real-World Odyssey

The upcoming industry projects represent the culmination of our learning journey. Each cohort will tackle real-life challenges, working in teams to devise innovative solutions. These projects are not just exercises in coding but a testament to our ability to solve complex problems, think critically, and work collaboratively. They will span various domains, from developing dynamic web applications to creating sophisticated software solutions that address genuine business needs. This hands-on experience is invaluable, providing a glimpse into the life of a professional developer and honing the skills necessary to excel in the tech industry.


 

Vendor Qualifications: Elevating Expertise

In tandem with our project work, we will also focus on preparing for and obtaining vendor qualifications. These certifications are more than just accolades; they are a recognition of our proficiency and commitment to excellence in software development. They signal to employers the high standard of our training and our readiness to contribute meaningfully to the tech community. Preparing for these qualifications will involve intensive study and practice, pushing us to consolidate our learning and apply it in a structured, exam-based context.


Incorporating the exercises from the worksheets into our curriculum has not only made learning more interactive but also demonstrated the practical applications of programming concepts. Here's a glimpse into the technical journey we've embarked upon, with examples of the tasks and sample code that brought concepts to life for our students.


Starting off we regularly visited FreeCodeCamp.org to complete their course on "Scientific Computing with Python". Click the link above to access the free course. It looks like this:


I completed the first two of ten units within the course. I'm still working my way through them and plan to have the course completed by the end of April. As a veteran of the theory, concepts, computer science, design and technology knowledge, I was surprised by how easy to use the interface is and how much both I and my students enjoyed learning and developing our understanding of coding concepts and python using this platform. I'm super grateful to the team at FreeCodeCamp for the work that they do in bringing this knowledge and learning opportunities to the world for free. It is a kindness that brings personal and professional growth and joy to millions of people each day.


Here is how the course we commenced is structured:


  1. Learn String Manipulation by Building a Cipher, Completed

  2. Learn How to Work with Numbers and Strings by Implementing the Luhn Algorithm

  3. Learn Lambda Functions by Building an Expense Tracker

  4. Learn Python List Comprehension by Building a Case Converter Program

  5. Learn Regular Expressions by Building a Password Generator

  6. Learn Algorithm Design by Building a Shortest Path Algorithm

  7. Learn Recursion by Solving the Tower of Hanoi Puzzle

  8. Learn Data Structures by Building the Merge Sort Algorithm

  9. Learn Classes and Objects by Building a Sudoku Solver

  10. Learn Tree Traversal by Building a Binary Search Tree

Scientific Computing with Python Projects

It's time to put your Python skills to the test. By completing these projects (listed below), you'll demonstrate that you have a strong foundational knowledge of Python. And you'll qualify for freeCodeCamp's Scientific Computing with Python Certification. I'm still working my way through them, feel free to join me on this journey and contact me to let me know how it is going for you.


Projects:

  • Arithmetic Formatter

  • Time Calculator

  • Budget App

  • Polygon Area Calculator

  • Probability Calculator


This is what the interface looks like when you are completing the course. On the left you have the code section, similar to the typical IDE. This is the input window, where you input your code. On the right the black square is the output window, this is where you see the results of your code once the program (and its algorithms have been executed). You can see that the code beneath the instructions on the left starts on line 9. Programs execute in sequential order. This means the code is read and run line by line by the compiler/executor. On this screen, and many others, the instructions are between the lines of code, and you are provided with a limited set of lines to edit in order to solve the puzzle. This is really what coding is, it's solving puzzles. If you love to solve puzzles, then you will love coding! Once you are happy with the code you can click the "Check my code" button on the bottom left of the screen. If your code is good the system will congratulate you and make a joke of some kind and you will be able to move on. If, however, your code is incorrect, the system will try to help you to solve the puzzle of the code by giving you some simple tips. It does, however, allow you to fix the issue, it won't simply give you the answer, and I think that this is a really good design feature. You need to work it out before moving on.



 

Exploring Python Basics with "Hello, World!"

One of our initial forays into programming began with the quintessential "Hello, World!" program. This exercise served as an introduction to Python syntax and the function definition.


def welcome():
print("Hello world")
welcome()

This simple exercise laid the foundation for understanding functions, indentation, and the importance of syntax in Python programming. This is also typically the first small program that many people create when they begin programming in Python.


The Magic of Randomness: Dice Roll Simulator

We delved into Python's random module to simulate a dice roll, an exercise that introduced students to importing libraries and generating random numbers.


from random import randint
def roll_dice():
return randint(1, 6)
print(f"The dice rolled a {roll_dice()}!")

This task illustrated the utility of Python's standard library and how functions can return values to simulate real-world processes.


String Manipulation and Silly Sentences

We explored string manipulation and variable assignment through the creation of "silly sentences," combining nouns, adjectives, and adverbs in playful ways.


noun = "duck"
adjective = "fluffy"
adverb = "quickly"
print(f"The {adjective} {noun} {adverb} crossed the road.")

This exercise emphasized the versatility of strings in Python and introduced formatted string literals (f-strings) for inserting variables into strings seamlessly.


Conditional Logic and Chatterbots

Students were tasked with creating a simple chatterbot that uses conditional statements to respond differently based on user input, showcasing the basics of user interaction.


name = input("What is your name? ").lower()
if name == "luke":
print("I am your father.")
else:
print(f"Nice to meet you, {name}.")

Through this exercise, learners saw firsthand how Python can be used for decision-making processes and personalized user experiences.


Data Collection and Analysis

In a mini data collection program, students wrote code to ask users for various pieces of information, then processed and displayed this data, highlighting Python's capability for data handling.


age = int(input("What is your age? "))
print(f"You are {age} years old.")

This task underscored Python's utility in gathering and manipulating user input, a fundamental aspect of many software applications.


Integrating Knowledge: Design a Flowchart

Finally, students were challenged to design a flowchart for a program before translating it into Python code. This exercise bridged the gap between abstract algorithm design and concrete coding skills.


# Example Python code based on a flowchart
if age >= 18:
print("You are an adult.")
else:
print("You are a minor.")

This part of the curriculum emphasized the importance of planning and designing before diving into coding, reinforcing the need for a methodical approach to programming.


These exercises and many others like them have been instrumental in providing a hands-on, practical approach to learning software development. They serve as building blocks for our industry projects and vendor qualifications, preparing students with the knowledge and skills needed to succeed in the tech industry.


As we delve deeper into the world of Python programming, it's crucial to understand that writing code isn't just about making something work. It's also about making your code readable, maintainable, and accessible to others (and to yourself in the future). This part of our journey emphasizes the importance of adhering to proper coding conventions, including annotation, indentation, and more. These practices are not merely suggestions; they are fundamental to developing professional and efficient code.


 

Embracing Coding Conventions

Coding conventions encompass a set of guidelines for writing code. These guidelines ensure consistency within your codebase and across projects you may work on with others. Python, in particular, has a comprehensive set of conventions known as PEP 8.


PEP 8: The Style Guide for Python Code

PEP 8 is the de facto code style guide for Python. It provides conventions for code formatting, naming conventions, line length, whitespace, and more. By following PEP 8, developers ensure that their Python code is readable and consistent. For beginners, starting with PEP 8 might seem overwhelming, but incorporating its guidelines from early on will make it a natural part of your coding process. You can explore PEP 8 in detail here.


Importance of Indentation

Python uses indentation to define blocks of code. Unlike other languages that might use braces {} to indicate blocks, Python’s use of indentation makes it uniquely readable. However, this also means that maintaining consistent indentation is critical. A common practice is to use four spaces per indentation level, which is a recommendation of PEP 8.


def sample_function():
if condition:
# four spaces for indentation
perform_action()

Annotations and Comments

Annotations (type hints) and comments are vital for enhancing the readability of your code. They help explain complex sections of code, making it easier for others to understand your logic and for you to remember your thought processes when you return to your code later.

Comments: Should be used to explain the "why" behind a block of code (the "what" should be evident from the code itself). Keep comments up-to-date or they can become misleading.



Annotations: Introduced in Python 3.5, type hints can help make your code more readable by indicating the expected types of variables and return values.


def greet(name: str) -> str:
# Returns a greeting
return f"Hello, {name}!"

 

The Zen of Python

Another piece of wisdom Python offers is the Zen of Python, accessible by typing import this into your Python interpreter. It's a collection of aphorisms that capture the essence of Python's design philosophy, including "Readability counts" and "Simple is better than complex." These principles can guide you in making coding decisions that align with Python's ethos.






Further Learning and Tools

Linters and Formatters: Tools like Flake8 and Black can automatically check your code for compliance with PEP 8 and even reformat your code to adhere to Python’s style guidelines, making them invaluable in your development workflow.


Official Python Documentation: Always a credible source, the official Python documentation provides comprehensive guides and tutorials on Python syntax, libraries, and more.

Code Reviews: Participating in code reviews with peers or mentors can offer insights into improving your coding practices and adhering to conventions.


Conclusion

Adhering to proper coding conventions is not just about aesthetics; it's about writing code that lasts and communicates your intentions clearly. As you grow as a Python developer, these practices will become second nature, greatly enhancing the quality of your work and your collaboration with others in the Python community. Remember, the goal is not just to write code that works but to write code that thrives.


The Road Ahead

As we embark on this final stretch, the anticipation and excitement are palpable. The industry projects and vendor qualifications are not just the conclusion of our program but the beginning of our professional journeys in the vast world of software development. These experiences are designed to challenge us, to stretch the boundaries of our understanding, and to prepare us for the realities of the tech industry. They are an opportunity to apply our skills, to innovate, and to make a tangible impact. The next few weeks promise to be some of the most intense and rewarding of our course. With the support of our peers and mentors, we will tackle these challenges head-on, ready to emerge not just as graduates of this program but as skilled, confident software developers poised to make our mark on the world. The journey continues, and the best is yet to come.


As we culminate these ten weeks, it's not just the technical skills that we take away. It's the critical thinking, the collaborative spirit, and the relentless pursuit of improvement that will carry us forward. To my cohorts, thank you for being part of this remarkable journey. The future of software development shines brighter with your contributions. As we look ahead, the landscape of technology continues to expand. The tools and languages we've embraced are just the beginning. The true essence of software development lies in the perpetual quest for knowledge, the courage to innovate, and the wisdom to apply our skills for the greater good.


Let's continue to code, create, and change the world, one line at a time.


Warm regards,


Paul Powers

18 views0 comments

Recent Posts

See All

Comments


bottom of page