Posted on Leave a comment

Top 3 Freelance Developer Contract Templates (Free)

Legal Contract Freelancing

This article is for you if you are either of the following:

  • You’re a freelance developer or freelancing agency and you want to offer your services to a client.
  • You’re a client and you want to take the service from a freelance developer.

If you belong to either group, you’re in the right place! 🙂

Disclaimer: Before I share the contract templates for freelance developers with you, I’m legally required to tell you that I’m not an attorney (I’m a programmer first and teacher second). So, you cannot take this as legal advice. Instead, I simply share some contract templates with you that I found useful during my own career as a freelance developer.

Yeah, I also like the color of the disclaimer background. Are you ready for the legal stuff? So, let’s get it over already!

ALL LINKS OPEN IN A NEW TAB! I hate those links that don’t do this.

#1 Freelance Web Development Contract (GoogleDocs, PDF)

Based on the contract given at the source, I’ve created a Google Docs contract and a PDF that you can access here:

Freelance Web Developer Contract

This contract is 100% based on the excellent resource from Stuff & Nonsense at the following site:

Link: https://stuffandnonsense.co.uk/projects/contract-killer

This particular contract was quite useful during my career as a freelance developer earning $100 per hour and more—and I’m very grateful for the great work they’ve put into it. It’s also a contract that doesn’t shy away clients because it’s easy to read, relatable, and authentic. Love it!

#2 Freelance Developer Contract (GoogleDocs, PDF)

Again, based on the contract given at the source, I’ve created a Google Docs contract and a PDF that you can access here:

Freelance Developer Contract

You can find the full contract either on the Google Docs I created for you (click on the image!) or at the original site as given in the following link.

Link: https://www.docracy.com/0kpa5hfcobb/freelance-developer-contract

Do you prefer a Word template? No problem, there’s a contract template for you as well!

#3 Basic Freelance Contract Template (Word)

Do you seek more general contract templates for freelancers? Here’s a Word contract template from legaltemplates.net:

Freelance Contract Template Word

What I particularly like about this template is that the underscores highlight clearly where you need to fill in the blanks. It cannot get any simpler than that!

Link: https://legaltemplates.net/wp-content/uploads/2018/06/Freelance-Contract.doc

You don’t need four contracts—one is sufficient. However, I found that there’s one resource missing of a general freelancer contract (not necessarily tailored towards freelance develoepers) that’s also available as a Google Docs. As it turns out, there’s one that fits these requirements perfectly!

#4 General Freelancing Contract (GoogleDocs)

This excellent freelancing contract is from Jyssica Schwartz—and it addresses a wide spectrum of issues. Here’s the table of contents:

Click the following image to check out the interactive contract template on GoogleDocs:

This is a comprehensive contract but it requires a bit more work for you to get started. Here’s the link to the original contract resource:

Link: https://docs.google.com/document/d/1Bg_1m1C05YqTJzp5MBZMhlREemUrFrOvOE7rsNOc2X0/edit


These four contract templates should be sufficient to get you started with your first few gigs. I know it can be a pain to customize a given contract template—you have to read over it at least once—but view it as a one-time investment into your business success. If you set up the contract once, it can protect you from litigation for many years to come. Get this one thing done today and make one big step progress towards your new freelancing adventure!

I hope you liked this article—before you go, please allow me to present my new book: Leaving the Rat Race with Python where I show the best success tips for upcoming freelancers in the programming space:

Do you want to develop the skills of a well-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Leaving the Rat Race with Python Book

Where to Go From Here?

Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

The post Top 3 Freelance Developer Contract Templates (Free) first appeared on Finxter.

Posted on Leave a comment

Keep It Simple, Stupid! Minimalism in Programming: How Complexity Harms Your Productivity

Complexity

This article is based on a book chapter from my upcoming book “From One to Zero: A Minimalistic Approach to Programming”.

My programming students often write in with their struggles and failures. Many students ultimately overcome their struggles—but a large percentage of them give up their programming ambitions after realizing how hard creating software can be. These students started with the goal of becoming professional coders, but, ultimately, they missed that target.

After thousands of personal conversations with these students, it became apparent that many new coders don’t fail because they don’t know one or the other Python feature or because they lack technical skills, intelligence, or even talent.

These are not the underlying reasons why they fail.

Instead, they fail because they are overwhelmed by the complexity lurking everywhere in programming. The complexity causes them to throw in the towel. This is unfortunate because there are many ways to mitigate the harmful effects of complexity in programming. In the previous chapter, you’ve already learned some strategies about the 80/20 principle (Focus on the vital few and sacrifice the trivial many!).

In this chapter, we’re going to have a comprehensive look at this important and highly underexplored topic. What exactly is complexity? Where does it occur? How does it look like?

Let’s start with a quick overview—there’s significant complexity in selecting the right

  • programming language among dozens of popular languages,
  • coding project to work on—from thousands of open-source projects and myriads of problems,
  • libraries within a language (scikit-learn vs NumPy vs TensorFlow),
  • emerging technologies to “bet on”—Alexa apps, smartphone apps, browser-based web apps, integrated Facebook or WeChat apps, virtual reality apps—and
  • coding editor such as PyCharm, IDLE, and Atom.

Given the great confusion caused by these sources of complexity, it’s no surprise that “How to start?” is one of the most common questions from programming beginners.

To answer the question right away, the best way to start is not by choosing a programming book and reading over all syntactical features of the programming language. Surprisingly, these coding books sell well—even I am a seller of such books. However, interacting with thousands of programming students personally I realized that many ambitious students buy programming books as a commitment device to put the learning task on their ToDo lists—if they’ve spent money on the book, they better read it or the investment will be lost. But as so many other tasks on their ToDo lists, reading a programming book is seldomly one to be completed.

Many students buy these programming tutorial books but very few actually read them.

So, what is the best way to start to learn to program? In my opinion, the best way to start is to choose a practical code project—a simple one if you’re a beginner—and push it to completion.

  • Don’t read coding books before you do this.
  • Don’t read random tutorials on the web.
  • Don’t scroll through endless feeds on StackOverflow.

Just set up the project and start coding with the limited skills you have and your common sense.

It’s okay if you don’t understand what you’re doing, you will gradually increase your understanding. You read books and articles only to make progress on the project in front of you. By diving into the process of finishing your first project, you need to solve a number of highly relevant problems:

By answering these questions, you gradually build a well-rounded skill set of a practitioner. Over time, you’ll answer these questions better and better. Your speed and skill to solve these problems will grow. You’ll be able to solve similar problems much bigger and you’ll create your internal database of programming patterns and conceptual insights. Even advanced coders learn and improve with the exact same process—only the coding projects have become much larger and more complicated.

Let’s assume you adopt this project-based learning approach. You focus on a single project and work on it for a considerable amount of time. What is your biggest enemy now? You guessed it: complexity.

You’ll struggle with complexity in:

  • finding bugs in ever-growing codebases,
  • understanding code components and how they interact,
  • choosing the right feature to be implemented next,
  • understanding the mathematical and conceptual basics of the code.

Complexity is everywhere, at every stage of a project that comes to life. And the hidden costs of this complexity are very tangible: coders who are just starting out throw in the towel and the projects never see the light of day. The beginner argues: “coding is too difficult for me” and he truly believes it—even though nothing can be further from the truth.

The root of the problem is overwhelming complexity and a lack of focus. So, the question arises:

How to solve complexity and a lack of focus?

Minimalism

The answer is straightforward, and I’ve already stressed it a few times in this book: minimalism. Seek simplicity and focus – in every stage of the coding cycle. I want you to take this one concept out of the book: Take a radically minimalistic position in every area you’ll encounter in the programming space. If this book can convince you to take more extreme measures to increase your focus, it has accomplished its mission!

Let’s dive deeper into the concept of complexity to develop an understanding of one of the great enemies of your coding productivity.

What is Complexity?

In different fields, the term complexity comes with different meanings. Sometimes, it’s strictly defined, such as in computational complexity of a computer program that provides a means to analyze a given code function for varying inputs. Other times, it’s loosely defined as the amount or structure of interactions between system components. But in this book, we’re going to use it in a more generic way.

The Merriam Webster dictionary defines complexity as “something complex”. The term complex is defined as “a whole made up of complicated [
] parts”. If you resolve the term complicated—“difficult to analyze, understand, or explain”—you end up with the following rough definition:

Complexity: “a whole, made up of parts, that is difficult to analyze, understand, or explain”.

This is how we use the term complexity in this book. Complexity describes a whole system or entity. It is difficult to explain or describe. Because of its difficulty, complexity causes struggle and confusion. When confronted with complexity, people find themselves cognitively unable to comprehend the deeper meaning, implications, or effects of “the whole”.

Complexity

They cannot see the big picture—complexity is the enemy of clarity, closure, and predictability, because a complex system behaves in highly unpredictable ways. Where do you find complexity? You’ll find it everywhere, because real-world systems are messy: A highly interrelated web of causes and effects that obfuscates the behavior of a real system, and that is impossible to decode for individuals who are themselves caught in this complex web. Like a differential equation, the output of one system feeds into another system’s input which, in turn, feeds back into the first system as an input. Examples of highly complex systems are the stock market, social trends, emerging political viewpoints, and big computer programs with hundreds of thousands of lines of code—such as the Windows operating system.

If you are a coder, you are especially prone to overwhelming complexity. Let’s dive into different sources of complexity in the field of programming:

  • Complexity in a Project Lifecycle
  • Complexity in Software and Algorithmic Theory
  • Complexity in Learning
  • Complexity in Processes
  • Complexity in Social Networks
  • Complexity in Your Daily Life
  • Complexity in a Project Lifecycle

The best way to learn and create lasting value is through your participation or initiation of a real-world project. But how does it look like when a real-world project comes to life? Let’s dive into the different stages of the project lifecycle: Planning, Defining, Designing, Building, Testing, and Deployment (see Figure 1).

Figure 1: A software project comes to life – the project lifecycle consists of six conceptual phases: Planning, Defining, Designing, Building, Testing, Deployment.

Figure 1 shows the software development life cycle consisting of six phases. Even if you’re working on a very small software project, you’re likely going through all six phases of the software development lifecycle. Next, you’ll quickly dive into all six phases—and how complexity has a significant impact on every one of them.

Planning

The first stage of the software development life cycle is the planning phase. From software engineering literature, you may know this as requirement analysis. The purpose of this phase is to determine how the end product will look like. A successful planning phase leads to a strictly defined set of required features to deliver to the customer or the end user.

The planning phase solves a multi-dimensional problem where different departments and functions must collaborate to determine the optimal set of features of the software. A number of factors must be taken into consideration: the costs of building a feature, the risk of not being able to successfully implement the feature, the expected value for the end user, marketing and sales implications, maintainability, scalability, legal restrictions and many more.

This phase is crucial because it can save you from massive wastages of downstream energy in the following phases. Business owners know that capital allocation (or generally-speaking: resource allocation) is the single most important function of a CEO. The planning phase is where leverage plays out to its fullest extent: Planning mistakes can lead to millions of dollars’ worth of wasted resources. On the other hand, careful planning has the power of setting the business up for great success in the years to follow. The planning phase is a great leverage point where you can apply your newly acquired skill of 80/20 thinking.

However, the planning phase is also very difficult to do right.

Why? Because of our major enemy that is lurking everywhere: complexity. It is complicated to assess risk in advance properly. It’s equally complicated to figure out the strategic direction of a company or an organization. It’s complicated to guess the customers’ responses to a software project. It’s complicated to weigh the positive impact of different feature candidates—the features that are considered for inclusion. And it’s complicated to determine the legal implications of a given software feature. Taken together, the sheer complexity of solving this multi-dimensional problem is killing us.

Defining

Compared to the previous phase, this phase is relatively simple. The defining phase consists of translating the results of the previous phase (requirements) into properly specified software requirements. In other words, it formalizes the output of the previous phase to gain approval or feedback from clients and end users who will later use the product.

Designing

The goal of the designing phase is to draft the architecture of the system, decide on the modules and components that deliver the defined functionality, and design the user interface – keeping the requirements in mind that were developed in the previous two phases. The gold standard of the designing phase is to create a crystal-clear picture on how the final software product will look like and how it is built.

But the devil lies in the detail! A great system designer must know about the pros and cons of various software tools to build the system in the most efficient manner. For example, some libraries may be very easy to use by the programmer but slow in execution speed. Building own libraries is harder for the programmers but may result in much higher speed and, consequently, improved usability of the final software product. The designing phase must fix these variables so that the benefit/costs ratio is maximized—for the specific definitions of costs and benefits in your organization.

Roughly speaking, you want maximum bang for your buck.

Building

This is where many coders want to spend all their time in. The building phase is where the transformation from the architectural draft to the software product happens. Here, your ideas transform into tangible results—it feels satisfying to see your brainchild come to life.

Through proper preparation in the previous phases, a lot of complexity has already been eliminated. For example, the builders know which features to implement from all the possible features. They know how the features look like and which tools to use to implement them.

Yet, the building phase is always full of new and emerging problems. Unexpected things happen that slow down the progress such as bugs in external libraries, performance issues, corrupted data, human mistakes, and many more. Building a software product is a highly complicated endeavor. To write great software, you must use an artificial language and properly explain to dumb machines what to do in every possible circumstance. A small spelling mistake (=bug) can decide over the correctness and viability of the whole software product.

Testing

Congratulations, you’ve implemented all requested features and the program seems to work.

Are you done? Not quite!

You still must test the behavior of your software product for different user inputs and usage patterns. It seems like a minor detail, but this phase is often the most important of all!

In fact, it’s so important that many practitioners now advocate the use of test-driven development where you don’t even start to implement (in the previous phase) without having written all tests. While you can argue against that point of view – I haven’t seen a way to rigorously deploy test-driven development in practice – it’s generally a good idea to spend lots of time to think of different ways to test your product by creating test cases and checking if the software delivers the correct result for these test cases.

For example, if you implement a self-driving car, you must write so-called unit tests to check if each little function (a unit) in your code generates the desired output for a given input. This will usually uncover some faulty functions that behave strangely under certain (extreme) inputs. But even if all your unit tests successfully pass, you haven’t yet completed the testing phase. You must test the correct interaction of the units as they’re building a greater whole. You must design real-world tests, drive the car for thousands or even tens of thousands of miles to uncover strange behavior patterns under strange and unpredictable situations.

  • What if your car drives on a small road without road signs?
  • What if the car in front of you abruptly stops?
  • What if multiple cars wait for each other on a crossroad?
  • What if the driver suddenly steers into approaching traffic?

There are so many tests to consider – the complexity is so high that many people throw in the towel here. What looked good in theory, even after your first implementation, often fails in practice after applying different levels of software testing such as unit tests or real-world usage tests.

Deployment

Your software has passed the rigorous testing phase. Now, it’s time to release it and throw it into the marketplace.

This phase requires you to launch the product, create marketing campaigns, talk to early users of the product, fix new bugs that will surely come to light after being exposed to users, orchestrating the deployment of the software on different operating systems, supporting and troubleshooting different kinds of problems, and maintaining the code base to adapt and improve over time. Needless to say that this phase can become quite messy, given the complexity and interdependency of the various design choices of your product (like software libraries used, computing power required, usage patterns assumed).

Are you already discouraged? Good – now you know the enemy. But stay with us because there’s a solution in this book!

Complexity in Software and Algorithmic Theory

While there’s significant complexity in the whole process around software development, there’s as much complexity within a given piece of software. Complexity in software—how is it defined? You may already have an intuition regarding complexity in software products (“Wow – how did they implement this face detection feature! It must have been really complicated!”).

But there are many metrics in software engineering that measure the complexity of software in a more formal way.

For instance, there’s the precisely defined term of algorithmic complexity. This has nothing to do with intuition about how easily you can understand a given code piece. Instead, algorithmic complexity talks about the resource requirements of different algorithms. It allows you to compare different algorithms that solve the same problem. For example, say you’ve implemented a game app with a high-score rating system. You want the players with the highest score to appear at the top of the list, and the players with the lowest score at the bottom.

In other words, you need to sort the list. Sorting a list is more complicated for 1,000,000 than it is for 100 players. There are thousands of algorithms to sort a list. Some algorithms scale better with an increasing size of the list input; others scale worse. As long as you’re app serves a few hundred users, it doesn’t really matter which algorithm you choose. But as your user base grows, the runtime complexity of the list grows super-linearly. Soon, your users will have to wait longer and longer for the list to be sorted. They start complaining—you need better algorithms!

Figure 2 exemplifies the algorithmic complexity of two schematic algorithms. On the x-axis, it shows the size of the list to be sorted. The y-axis shows the runtime of the algorithm (in time units). Algorithm 1 is much slower than Algorithm 2. In fact, the inefficiency of Algorithm 1 becomes more and more apparent, the more list elements must be sorted. As a result, your game app becomes slower and slower, the more users play with it.

Figure 2: Algorithmic complexity of two different sorting algorithms.

That’s why algorithmic complexity is a thoroughly researched field with decades of progress and myriads of computer scientists who continuously reduce the algorithmic complexity of algorithms to solve the same problems quicker and quicker. In my opinion, the algorithms produced in decades of computer science research are among the most valuable technological assets of humanity. Those algorithms allow us to solve the same problems with fewer resources, not once, but over and over. We truly stand on the shoulders of giants.

Interestingly, algorithmic complexity is not the only metric that measures complexity of code. There are also some practical measures such as Cyclomatic Complexity, a metric developed by Thomas McCabe in 1976 that describes the number of linearly independent paths through your code: the number of paths that have at least one edge that’s not in another path. For example, code with an if statement would result in two independent paths through your code, so it would have a higher cyclomatic complexity than a flat code without an if statement. The cyclomatic complexity is a solid measure of the cognitive complexity of many code bases.

However, this measure of complexity ignores the cognitive complexity that comes from, say, nesting different for loops compared to a flat for loop. There are other measures that improve upon this (such as NPath complexity). The important take-away, however, is that complexity is such a big factor in both algorithmic theory and implementation practice that it has been thoroughly researched for decades by hundreds of thousands of researchers. The goal of all these efforts is to reduce complexity to mitigate its harmful effects on productivity and resource utilization of humans and machines alike.

Complexity in Learning

The world’s information can be modeled as a huge network of interrelated chunks of information—and no chunk of information is independent of other chunks.

Woman Sitting in Front of Macbook

In the year 2012, Google announced to populate a data structure called the “Knowledge Graph” with information. The knowledge graph represents information in a network-like structure—which, instead of storing dumb and independent facts, maintained an interrelationship between different facts and pieces of information.

The Google search engine then used this interdependency of facts to enrich the search results with higher-level knowledge and to create many answers autonomously.

Example: small part of the knowledge graph may be about the famous computer scientist Alan Turing. In the knowledge graph, the concept of Alan Turing is connected to different pieces of information such as his birth year (2012), his field of study (computer science, philosophy, language theory), and his doctoral advisor (Alonzo Church). Each of those pieces of information is also connected to other facts (e.g., Alonzo Church’s field of study was computer science as well), forming a massive network of interrelated facts. You can use this network to acquire new information and answer user queries programmatically. For example, a query about the “field of study of Turing’s doctor father” would result in the deducted answer “computer science”. While this may sound trivial to you, generating new factoids like these lead to a breakthrough in information retrieval and search engine relevancy. You’d probably agree that it’s far more effective to learn by association than by remembering unrelated facts. You can easily remember a story, but you struggle remembering the phone number of your mother!

Any field of study explores and tries to extend the knowledge graph of humanity with more facts and observations. But any field of study focuses only on a small part of the graph—each consisting of myriads of interrelated factoids. You cannot really say that you’ve understood a fact, if you haven’t already understood all related facts. How can you possibly know Alan Turing without knowing about the believes, philosophies, and characteristics of his doctorate advisor Church? And how can you understand Church without also understand Turing?

Network Knowledge Graph

If you study any field, you must accumulate knowledge about a great number of interrelated facts. Over time, you’ll understand more than you understood before—but you’ll never understand everything. Knowledge is far too complex. There are too many dependencies and facts in the graph. You can learn more but the more you learn, the more you become aware of the limitations of your knowledge. It is obvious that complexity poses the most fundamental boundaries to your ambitions to learn. Learning and complexity are two sides of the same coin: complexity is at the boundary of the knowledge you’ve already acquired. To learn more, you must first know how to control complexity.

We’re getting kind of abstract here, so let’s have a practical example! Say you want to program a trading bot that buys and sells assets according to a set of sophisticated rules. There’s lots of useful knowledge that you could learn before starting your project. You could learn about concepts such as the basics of programming, distributed systems, databases, application programming interfaces (APIs), web services, machine learning, data science, maths and many more.

You could learn about practical tools such as Python, NumPy, Scikit-learn, CCXT, TensorFlow, and Flask. You could learn about trading strategies and stock market philosophies. And, in fact, many people approach these problems with such a mindset. They never stop learning. They never feel ready to start the project. They keep learning because the more they learn, the less they feel knowledgeable. Each of the mentioned categories will demand thousands of hours of study to master it. You’ll never attain sufficient mastery in all those fields to truly satisfy your desire to feel prepared. Frustrated and overwhelmed by the complexity of the whole endeavor, you feel like throwing in the towel and leave the field to more intelligent coders. Complexity is about to take its next victim: you.

Fortunately, because you’ve read this book, you’ve attained the only effective weapon against complexity. This weapon has many names: focus, simplification, scaling down, reducing, minimalism.  It’s how you obtain success: you focus on mastering one area—and forgetting about anything else. You reduce complexity with minimalism. You think first-principles and forget about the noise. You create one program, not many. Philosophically, you go for one full life and don’t try to live one hundred partial ones.

Complexity in Social Networks

Complexity appears wherever there’s interaction between many different components. Social networks are a prime example. If you’re working in a large organization, you know that hundreds or even thousands of people must work together towards shared goals. At the same time, thousands of people also have thousands of different opinions and perspectives on the same matters.

Attaining the same goal can be a stretch for one person and a breeze for another. Writing 100 lines of code may take one programmer a week and another one a day. A third programmer writes 200 lines of code in half an hour, delivering higher quality than both. Moreover, some people work well in teams, others work better alone.

Complexity is an integral part of social networks. But in what way is this relevant for a tech book like this? Many talented software engineers end up as team leaders. (You get promoted until you reach your level of incompetency.) They now leave the simple and clean world of software, speaking comparatively, and enter the world of social interactions, office politics, leadership, and team motivation. Naturally, they use the tools they’ve learned in programming and apply them to their new tasks of leading a team. They try to program every team member with detailed activity logs and rigid structures—and, as a result, end up micromanaging people as they’ve micromanaged dumb machines. Yet, this clearly doesn’t scale and it doesn’t keep morale up!

Social Chill

If you find yourself as a team leader, start to take yourself back. Forget your rule books and algorithms. Instead, trust and motivate, be empathetic and listen, defend your team members against distractions and harmful influences while taking your own interests back to nurture your team, and create a healthy and functioning microorganism with its own intelligence, culture, and dynamics in solving problem as they arise.

Effective social interaction is a highly multi-dimensional problem and there are exceptions to every rule you could formulate for social situations. Many coders cannot handle it: they would rather master the complexity of computers with rules and algorithms, than embracing the messy complexity of human relationships.

Are there any further sources of complexity? You bet there are!

Complexity in Processes

A process is a series of actions that you, a group of people, or even a machine takes with the goal of realizing a defined result.

The complexity of a process is given by its number of actions, participants, or branches. In general, if you have more actions, the process becomes more complicated (see Figure 3).

Figure 3: Two example processes: one-person development vs team development.

A lot of processes have been developed and many software companies follow process models to develop software (e.g., agile development, scrum), maintain customer relationship (e.g., CRM, sales scripts), and create new products and business models (e.g., business model canvas). If people are the lifeblood of a business, processes are the veins and arteries. If your arteries are clocked, you need to get rid of the bottlenecks quickly or your body will suffer. It’s the same for a business: if the business suffers, you must remove bottlenecks in your business processes to stay alive.

In an organization, it’s often easier to establish a new process than to change an existing one because of the stakeholders of established processes. Try to shut down an unprofitable department in your organization and you’ll quickly learn this lesson. Many organizations deteriorate into bureaucracies through the continuous accumulation of more and more processes. Complexity starts to accumulate in the system. Innovation finds less and less vehicles for change—it can’t break through the complexity. Resources are wasted and an increasing number of actions within processes become redundant or even unnecessary. Trying to fix the suffering business, management invests energy to establish new processes and new actions and the vicious cycle begins to destroy the business or organization.

Complexity is the enemy of efficiency. If you want to build an efficient organization, or if you want to become an efficient individual, radically weed out unnecessary steps, actions, and processes. Keep your house clean and engage in radical minimalism! Don’t worry, you most likely won’t reach the point where you have weeded out too much. There’s no point in telling yourself that complexity in processes is useful and things can be oversimplified. This is like telling an obese society that they must ensure to eat enough sugar to feed their bodies with energy. Yes, but no – an increase in complexity and sugar consumption is built into the modern world and takes care of themselves!

Complexity in Your Daily Life or the Death of a Thousand Cuts

The purpose of this book is to increase the productivity of your programming efforts. To become a more efficient programmer, you must tackle the daily distractions and the constant competition for your valuable time. There’s a never-ending stream of external distractions that keep you from doing the deep work required for programming. Computer science professor Cal Newport talks about this in his excellent book Deep Work (a recommended read). He argues that there’s both an increasing demand for work that requires deep thinking—programming, researching, medicine, writing—and a decreasing supply due to the proliferation of communication devices, opportunities, and entertainment systems. If increasing demand meets decreasing supply, economic theory suggests that prices will rise. If you’re capable of engaging in deep work, your economic value will increase and your income will rise.

Death of Thousand Cuts

In fact, you can observe this trend in the programming industry: the average freelance developer earns $61 per hour. There never has been a better time for programmers who can engage in deep work. For instance, highly skilled machine learning engineers demand multiples of hundreds of thousands of dollars in yearly salaries.

Now, the caveat: it has become almost impossible to engage in deep work if you don’t brutally enforce it. The external world demands your attention. Your boss and your colleagues will regularly pop into your office. Your smartphone will demand your attention in, say, 20 minute intervals. Your email provider will present you with email after email—each asking for a slice of your time. To make matters worse, not only the external world plays against your plan to engage in deep work—your internal work does, too. Deep work results in delayed gratification. It’s a satisfying feeling to have spent weeks of your time to complete a computer program that works.

However, what you desire in most moments is instant gratification. If you’re about to dive into deep work, your subconsciousness realizes how much effort it is and looks for ways to escape from the effort engaging in deep work. You want to answer the message from your friend because it will produce an easy boost of your endorphins. You want to engage in meaningless chit chat in the coffee corner. You want to watch Netflix and TV. The promise of delayed gratification becomes less and less attractive compared to the happy, colorful and lively world of instant gratification.

Due to the abundant availability of external stimuli in today’s world, your efforts to become productive are likely to die the death of a thousand cuts. Yes, you can switch off your smartphone once and use willpower to not watch an episode of your preferred series today. But can you do it consistently day after day? And even if you could force yourself not to use social media, will you be able to resist the urge of answering all emails in your Inbox—and use this time to write on your first novel? There’s an important difference between being busy and being productive!

How to Handle a Complex World

complex world

I hope that by now you are properly motivated why you need to overcome complexity—this was the purpose of this whole chapter. You should now see how complexity is the enemy of the lean and efficient organization and individual. You simply cannot become productive without mastering tactics and strategies to handle complexity. A simple but efficient tactic to overcome complexity in social networks is to uninstall them from your smartphone (I won’t water down this recommendation only because some people assume it’s not possible—read Deep Work from Cal Newport if you want to learn how it can be done). A simple strategy to overcome complexity in business is to schedule a monthly session where you discuss with your teams tasks you can get rid of—even knowing that these tasks may provide some value to some people (think: opportunity costs, not absolute value).

Let’s recap some of the most important consequences of the preceding arguments:

  • Complexity harms productivity due to the loss of focus it incurs.
  • If you don’t take control and full responsibility for this problem, it will quickly consume your most precious resource: time.
  • At the end of your life, you won’t judge whether you’ve led a meaningful life based on how many emails you’ve replied to, how many hours of computer games you’ve played, or how many Sudokus you’ve solved.

In the previous chapter, you’ve learned about the power of the 80/20 principle. Focus on the vital few and ignore the trivial many. How is the 80/20 principle connected to complexity? This is an interesting question – both seem to be two sides of the same coin! In a way, complexity creates the opportunity of focusing on the vital few. If only the vital few existed, everyone would only focus on them and there wouldn’t be any opportunity to create more with less.

But fear not – this is not how the world works. Instead, you’ll have plenty of opportunities to achieve more with less because complexity is an integral part of modern life. In fact, with inflating opportunities to spend your time, a growing amount of educational and entertaining content, and proliferating opportunities to visit every place and connect to every person under the sun, you can be sure to face an increasing amount of complexity in the decades to come. However, by learning how to handle complexity, by keeping it simple, you’ll be able to fight complexity better than most people and you’ll create a powerful competitive advantage for yourself and your business.

As the 80/20 principle, complexity is everywhere, and you constantly need to think about how to reduce complexity and simplify things. Keep it simple, stupid!

In the next chapter, we’ll learn how to apply this idea of keeping it simple by radically reducing complexity in the software development cycle and the value creation process as a software developer: minimum viable products.

… to be continued …

This article is based on a draft of a new chapter of my upcoming book “From One to Zero: A Minimalistic Approach to Programming”. Stay tuned for launch updates!


Where to Go From Here?

Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

Do you want to develop the skills of a well-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Leaving the Rat Race with Python Book

The post Keep It Simple, Stupid! Minimalism in Programming: How Complexity Harms Your Productivity first appeared on Finxter.

Posted on Leave a comment

3 Beautiful Website Templates to Impress Your Clients — for Freelance Developers [Free WordPress Themes]

Freelance Developer

The landscape of work is changing—independent work becomes more and more important on a relative and absolute basis. Upwork and Fiverr, the biggest freelancing platforms, are growing double-digit year after year. Do you want to participate in this disruptive trend and become a successful (part-time) freelance developer?

This article shows you the best website templates to make a great first impression to clients. Make no mistake, in a highly competitive landscape like the internet, the first impression is vital for your long-term success. If you choose the right website template in a WordPress-based website, you’ve done the first right step to your freelance success. So, what are the best WordPress templates for freelance developers?

ALL LINKS IN THIS ARTICLE OPEN IN A NEW TAB!

Let’s dive right into them!

Free Templates for Freelance Developers

There are plenty of free WordPress themes around—and we don’t see the need to buy a theme, or even create a custom theme for yourself. Instead, why not focus on growing your business and invest in your education—if you absolutely insist on spending money? 😉

#1 Astra

Astra is fast, fully customizable & beautiful WordPress theme suitable for blog, personal portfolio, business website and WooCommerce storefront.

#2 OceanWP

“OceanWP is the perfect theme for your project. Lightweight and highly extendable, it will enable you to create almost any type of website such a blog, portfolio, business website and WooCommerce storefront with a beautiful & professional design.”

#3 Elementor Theme

“A plain-vanilla & lightweight theme for Elementor page builder.”

If you want to create your thriving coding business online—look no further, check out one of those free WordPress plugins and build your freelancing website as soon as possible!

Do you want to develop the skills of a well-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Leaving the Rat Race with Python Book

Paid Templates for Freelance Developers

We also saw a few freelance developers who used a paid theme. While we don’t find this necessary, given the great free themes that exist, feel free to check out the websites of those freelance developers for inspiration!

Related Article: Freelance Developer Websites Examples

#1 Salient from Envato

Salient – Responsive Multi-Purpose Theme.

Here’s an example—click the image to explore how the theme looks in practice:

Web Developer Portfolio of Josue Espinosa

This template costs $60 from Envato.

#2 Lounge Lizard Original Theme

Lounge Lizard Original Theme WordPress template for business.

Here’s an example—click the image to explore how the theme looks in practice:

Web Developer Portfolio of Lounge Lizard

You can find more info about this theme on this webpage.

Where to Go From Here?

Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

The post 3 Beautiful Website Templates to Impress Your Clients — for Freelance Developers [Free WordPress Themes] first appeared on Finxter.

Posted on Leave a comment

Web of Trust, Part 2: Tutorial

The previous article looked at how the Web of Trust works in concept, and how the Web of Trust is implemented at Fedora. In this article, you’ll learn how to do it yourself. The power of this system lies in everybody being able to validate the actions of others—if you know how to validate somebody’s work, you’re contributing to the strength of our shared security.

Choosing a project

Remmina is a remote desktop client written in GTK+. It aims to be useful for system administrators and travelers who need to work with lots of remote computers in front of either large monitors or tiny netbooks. In the current age, where many people must work remotely or at least manage remote servers, the security of a program like Remmina is critical. Even if you do not use it yourself, you can contribute to the Web of Trust by checking it for others.

The question is: how do you know that a given version of Remmina is good, and that the original developer—or distribution server—has not been compromised?

For this tutorial, you’ll use Flatpak and the Flathub repository. Flatpak is intentionally well-suited for making verifiable rebuilds, which is one of the tenets of the Web of Trust. It’s easier to work with since it doesn’t require users to download independent development packages. Flatpak also uses techniques to prevent in‑flight tampering, using hashes to validate its read‑only state. As far as the Web of Trust is concerned, Flatpak is the future.

For this guide, you use Remmina, but this guide generally applies to every application you use. It’s also not exclusive to Flatpak, and the general steps also apply to Fedora’s repositories. In fact, if you’re currently reading this article on Debian or Arch, you can still follow the instructions. If you want to follow along using traditional RPM repositories, make sure to check out this article.

Installing and checking

To install Remmina, use the Software Center or run the following from a terminal:

flatpak install flathub org.remmina.Remmina -y

After installation, you’ll find the files in:

/var/lib/flatpak/app/org.remmina.Remmina/current/active/files/ 

Open a terminal here and find the following directories using ls -la:

total 44
drwxr-xr-x. 2 root root 4096 Jan 1 1970 bin
drwxr-xr-x. 3 root root 4096 Jan 1 1970 etc
drwxr-xr-x. 8 root root 4096 Jan 1 1970 lib
drwxr-xr-x. 2 root root 4096 Jan 1 1970 libexec
-rw-r--r--. 2 root root 18644 Aug 25 14:37 manifest.json
drwxr-xr-x. 2 root root 4096 Jan 1 1970 sbin
drwxr-xr-x. 15 root root 4096 Jan 1 1970 share

Getting the hashes

In the bin directory you will find the main binaries of the application, and in lib you find all dependencies that Remmina uses. Now calculate a hash for ./bin/remmina:

sha256sum ./bin/*

This will give you a list of numbers: checksums. Copy them to a temporary file, as this is the current version of Remmina that Flathub is distributing. These numbers have something special: only an exact copy of Remmina can give you the same numbers. Any change in the code—no matter how minor—will produce different numbers.

Like Fedora’s Koji and Bodhi build and update services, Flathub has all its build servers in plain view. In the case of Flathub, look at Buildbot to see who is responsible for the official binaries of a package. Here you will find all of the logs, including all the failed builds and their paper trail.

Illustration image, which shows the process-graph of Buildbot on Remmina.

Getting the source

The main Flathub project is hosted on GitHub, where the exact compile instructions (“manifest” in Flatpak terms) are visible for all to see. Open a new terminal in your Home folder. Clone the instructions, and possible submodules, using one command:

git clone --recurse-submodules https://github.com/flathub/org.remmina.Remmina

Developer tools

Start off by installing the Flatpak Builder:

sudo dnf install flatpak-builder

After that, you’ll need to get the right SDK to rebuild Remmina. In the manifest, you’ll find the current SDK is.

 "runtime": "org.gnome.Platform", "runtime-version": "3.38", "sdk": "org.gnome.Sdk", "command": "remmina",

This indicates that you need the GNOME SDK, which you can install with:

flatpak install org.gnome.Sdk//3.38

This provides the latest versions of the Free Desktop and GNOME SDK. There are also additional SDK’s for additional options, but those are beyond the scope of this tutorial.

Generating your own hashes

Now that everything is set up, compile your version of Remmina by running:

flatpak-builder build-dir org.remmina.Remmina.json --force-clean

After this, your terminal will print a lot of text, your fans will start spinning, and you’re compiling Remmina. If things do not go so smoothly, refer to the Flatpak Documentation; troubleshooting is beyond the scope of this tutorial.

Once complete, you should have the directory ./build-dir/files/, which should contain the same layout as above. Now the moment of truth: it’s time to generate the hashes for the built project:

sha256sum ./bin/*
Illustrative image, showing the output of sha256sum. To discourage copy-pasting old hashes, they are not provided as in-text.

You should get exactly the same numbers. This proves that the version on Flathub is indeed the version that the Remmina developers and maintainers intended for you to run. This is great, because this shows that Flathub has not been compromised. The web of trust is strong, and you just made it a bit better.

Going deeper

But what about the ./lib/ directory? And what version of Remmina did you actually compile? This is where the Web of Trust starts to branch. First, you can also double-check the hashes of the ./lib/ directory. Repeat the sha256sum command using a different directory.

But what version of Remmina did you compile? Well, that’s in the Manifest. In the text file you’ll find (usually at the bottom) the git repository and branch that you just used. At the time of this writing, that is:

 "type": "git", "url": "https://gitlab.com/Remmina/Remmina.git", "tag": "v1.4.8", "commit": "7ebc497062de66881b71bbe7f54dabfda0129ac2"

Here, you can decide to look at the Remmina code itself:

git clone --recurse-submodules https://gitlab.com/Remmina/Remmina.git cd ./Remmina git checkout tags/v1.4.8

The last two commands are important, since they ensure that you are looking at the right version of Remmina. Make sure you use the corresponding tag of the Manifest file. you can see everything that you just built.

What if
?

The question on some minds is: what if the hashes don’t match? Quoting a famous novel: “Don’t Panic.” There are multiple legitimate reasons as to why the hashes do not match.

It might be that you are not looking at the same version. If you followed this guide to a T, it should give matching results, but minor errors will cause vastly different results. Repeat the process, and ask for help if you’re unsure if you’re making errors. Perhaps Remmina is in the process of updating.

But if that still doesn’t justify the mismatch in hashes, go to the maintainers of Remmina on Flathub and open an issue. Assume good intentions, but you might be onto something that isn’t totally right.

The most obvious upstream issue is that Remmina does not properly support reproducible builds yet. The code of Remmina needs to be written in such a way that repeating the same action twice, gives the same result. For developers, there is an entire guide on how to do that. If this is the case, there should be an issue on the upstream bug-tracker, and if it is not there, make sure that you create one by explaining your steps and the impact.

If all else fails, and you’ve informed upstream about the discrepancies and they to don’t know what is happening, then it’s time to send an email to the Administrators of Flathub and the developer in question.

Conclusion

At this point, you’ve gone through the entire process of validating a single piece of a bigger picture. Here, you can branch off in different directions:

  • Try another Flatpak application you like or use regularly
  • Try the RPM version of Remmina
  • Do a deep dive into the C code of Remmina
  • Relax for a day, knowing that the Web of Trust is a collective effort

In the grand scheme of things, we can all carry a small part of responsibility in the Web of Trust. By taking free/libre open source software (FLOSS) concepts and applying them in the real world, you can protect yourself and others. Last but not least, by understanding how the Web of Trust works you can see how FLOSS software provides unique protections.

Posted on Leave a comment

19 Freelance Developer Websites That Convert Like Crazy

Web Developer Portfolio of Josue Espinosa

Do you want to work from home and earn a healthy living as a freelance developer? There has never been a better time! Freelance Developers make $51 per hour, on average, in the US. The highest hourly ratings are earned by freelancers outside freelancing platforms such as Upwork or Fiverr—by means of their own websites.

But how do you create a freelance developer website that converts strangers to paying customers?

In this article, I’ll answer this question by example. Each of the top 19 websites shown here is carefully selected based on the respective freelancer’s estimated success.

If you want to learn how to succeed as a freelance developer, check out our Finxter resources to create your thriving coding business online:

Check out those resources—your success is about being prepared! All links open in a new tab.

How to Create Your Own Freelance Developer Website in 5 Simple Steps

Creating a website as a freelance developer is relatively easy. Here are the five steps that you must complete:

  • Domain+Hosting: Create your meaningful domain name—like i-help-you-solve-your-tech-problems.com—and a simple WordPress site using a website hosting service (just Google this to get it done). WordPress is still the best technology that can create beautiful websites in very little time.
  • Niche+Customer Problem: Find the specific niche and customer problem you want to solve. Go niche. Go small. Don’t fear being too niched down–that doesn’t exist as a one-person freelancing business. Even a world-market of 2 clients a year will do if they pay you enough money. Don’t miss this step—it’s critical. Read more about finding your best niche here.
  • Copywriting: Fill your simple one-page site with a description of how you solve your customer’s problem. Make your value proposition obvious from the start. You can find more business education in my Python freelancer course.
  • Trust: Add trust elements to your website. What have you already accomplished in programming? Which websites and projects can they check out? What’s your StackOverflow bio? What’s your Github account? What did your previous employers say about you? Add pictures from you and make yourself human! Go deep into your past and find all valuable things you ever did that help you create trust for this specific customer problem you are targeting.
  • Pay: Find a way to get paid. There are plugins to embed a PayPal button—but the best way is to ask for an email. Just embed an HTML button with a mailto source attribute. You should have a separate bank account to divide your personal finances with your business finances from the start.

That’s it. You’ll revisit everything from time to time and improve your web presence through feedback and iteration. There are more things to do but you’ll figure them out as they appear. Don’t overthink—just do it!

Freelance Developer Website Examples

Next, I’m going to go over the best website examples of freelance developers I found at various resources (e.g., here).

#1 Web Development – Development – Software Design

Web Developer Portfolio of STRV

#2 Web Development – Software Development

Web Developer Portfolio of Josue Espinosa

#3 Web Development – Product Design – Software Development

Web Developer Portfolio of Yevgeniy Brikman

#4 Web Development – Software Developer – UI/UX 

Web Developer Portfolio of Rafael Caferati

#5 Python Freelance Developer

#6 Python Freelancing + Data Science

#7 Web Development – Illustrative Design

Web Developer Portfolio of Robby Leonardi

#8 Web Development – UI

Web Developer Portfolio of Matthew Williams

#9 Web Development – Motion Design

Web Developer Portfolio of Dries Van Broeck

#10 Web Development – Design

Web Developer Portfolio of Malte Gruhl

#11 Product Design – Product Analysis – Web Development

Web Developer Portfolio of Ben Bate

#12 Web Development – Marketing – Branding

Web Developer Portfolio of Lounge Lizard

#13 Web Development – Design – Dental Website – Marketing

#14 Web Development – Design – Content 

Web Developer Portfolio of Sean Halpin

#15 Web Development – UI/UX Design

Web Developer Portfolio of Adham Dannaway

#16 Web Development – UI Design

Web Developer Portfolio of Kyle Ledbetter

#17 Web Development

Web Developer Portfolio of Olivier Guilleux

#18 Web Development

Web Developer Portfolio of Ian Lunn

#19 Web Development

Web Developer Portfolio of Pierre Nel

Where to Go From Here?

Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

The post 19 Freelance Developer Websites That Convert Like Crazy first appeared on Finxter.

Posted on Leave a comment

Freelance Developer Resume Template — Free Download GDocs + PDF [No Signup]

Click on the image to create your own copy on Google Docs—opens the freelance developer resume template in a new tab in your browser:

Freelance Developer Resume (Free Download PDF + Google Docs)

Get this Freelance Developer Resume Template in different formats:

Resume

PROFESSIONAL SUMMARY

Are you looking for a value-oriented, experienced Python freelance developer to help you with your Python scripts and business applications? I’m your guy! I’ve got 20+ years of experience in the Python programming space. My focus is on writing short scripts to automate essential steps in your daily work routine. The scripts I wrote have saved clients more than 1000 hours of manual labor – in the last year alone. I will help you to find and unlock hidden time resources in your workday. 

EXPERIENCE

Fiverr – Python Freelance Developer

MONTH 2015 – 2020

  • 100+ five-star gigs successfully completed
  • Highest-rated freelance developer in “script automation”

Upwork – Python Freelance Developer

MONTH 2015 – 2020

  • 20 five-star gigs successfully completed
  • Top 20 highest-rated freelancer from thousands of freelance developers
  • $20,000 gig volume in 2020

TECHNICAL SKILLS

  • Python
  • Command-Line Scripting
  • Pandas
  • NumPy
  • Matplotlib

EDUCATION AND COURSES

University of Berlin – Bachelor of Science 2010

Computer science with a focus on automation & scripting

Finxter Python Freelancer Program – Certificate 2020

Completed full course program (100h+ material), practical gig completed: https://blog.finxter.com/become-python-freelancer-course

Do you want to develop the skills of a well-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Leaving the Rat Race with Python Book

Where to Go From Here?

Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

The post Freelance Developer Resume Template — Free Download GDocs + PDF [No Signup] first appeared on Finxter.

Posted on Leave a comment

Python’s NameError: name ‘xxx’ is not defined — How to Fix This Stupid Bug?

The Python interpreter throws the NameError exception if it encounters an undefined variable or function name. To fix it, you must figure out why the variable is not defined—the most frequent bugs are (1) to use the variable of function name in the code before it was defined, or (2) to misspell the name in either the definition or the usage.

Have a look at the minimal example in our interactive code shell:

Exercise: Define variable some_variable before you use it and fix the bug!

Note: All the explanations and solutions provided below have been verified using Python 3.8.5.

Problem

When one is beginning to write Python code, they will come across the NameError exception. The Python Interpreter throws this exception to state an error.  Experienced Python coders, even Python legends like Guido (I suppose), run into these errors, every now and then. In its simplest form, the error looks like something similar to the following:

>>> print(some_variable)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'some_variable' is not defined
>>>

Desired Output

This article aims to help the reader understand some of the most common reasons for this error.

>>> print(some_variable)
hello world
>>> 

The desired output, assumes the variable some_variable, points to the string "hello world".  In other words, the desired output would be an error free run of the reader’s Python code.

Background

Python is an interpreted language. This means, it interprets any Python code, line by line, from the beginning of the code to the end. The execution usually stops at the first error which the Python Interpreter encounters.  The error message usually prints out helpful information about the problem.  In most cases, the reader can debug, deduce and locate the erroneous syntax and fix it.  This blog will attempt to describe one such common problem called the NameError.

Missing Variable Definition

One common cause of the NameError exception is a missing variable definition. As mentioned before, Python is an interpreted language. This means that the reader should define the variables before using them. Consider the following code. The reader is eager to try out some basic Python code real quick.  So they fire up the Python interpreter to try out their fresh Python skills.

>>> print(some_variable)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'some_variable' is not defined
>>>

Oops!!! The reader finds out they have not defined some_variable, before they used it! Fix this problem as shown below. Define some_variable before using it!

>>> some_variable = ‘Hello World’
>>> print(some_variable)
Hello World
>>> 

Misspelled Variable Name

Misspelled variable names can be erroneous in a similar way. Consider the following example code.

>>> som_variable = ‘Hello World’
>>> print(some_variable)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'some_variable' is not defined
>>> 

Note: som_variable is not the same as some_variable (i.e. missing 'e')

Missing Function Definitions

Another common cause of the NameError exception is a missing function definition. Like variable definitions, the reader should define any function, before using it. Consider the following code.

>>> some_other_string = ‘Hello World’
>>> some_function(some_other_string)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'some_function' is not defined
>>> 

Again, the function 'some_function' is not defined before its use.
Fix this problem as shown below. Define 'some_function' before using it.

>>> def some_function(some_string):
... print(some_string)
... >>> some_other_string = ‘Hello World’
>>> some_function(some_other_string)
Hello World
>>>

Misspelled Function Name

Misspelled function names can be erroneous in a similar way. Consider the following example code.

>>> def som_function(some_string):
... print(some_string)
... >>> some_other_string = ‘Hello World’
>>> some_function(some_other_string)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'some_function' is not defined
>>> 

Note: 'som_function' is not the same as 'some_function' (i.e. missing 'e')

Wrong Scope

Yet another common cause of the NameError exception is the use of the variable in the wrong scope. Consider the following example.

>>> ## Define the function some_function()
>>> def some_function():
... a_local_variable = ‘I am Local
’
... print("Printing a Local variable from within a function definition: " + a_local_variable)
... >>> ## Call some_function()
>>> some_function()
Printing a Local variable from within a function definition: I am Local...
>>> >>> ## Try to print "a_local_variable" from outside the function definition
>>> print("Attempting to print the variable from outside some_function(): " + a_local_variable)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'a_local_variable' is not defined
>>> 

The NameError exception occurred because a_local_variable got called from outside its function scope. 
One way to fix this is by defining a_local_variable as a global variable instead. Consider the following example.

>>> ## Define a Global Variable
>>> a_global_variable = ‘I am global
’
>>> >>> ## Define the function some_function()
>>> def some_function():
... print("Printing the Global variable from within a function definition: " + a_global_variable)
... >>> ## Call some_function()
>>> some_function()
Printing the Global variable from within a function definition: I am global...
>>> >>> ## Try to print "a_global_variable" from outside the function definition
>>> print("Attempting to print the Global variable from outside some_function(): " + a_global_variable)
Attempting to print the Global variable from outside some_function(): I am global

>>> 

Unquoted String In print() Statement

Forgetting to quote strings in the print() statement can cause the NameError exception. This does not happen often, but it is good to know that it can happen. The reader is more likely to see a SyntaxError rather than a NameError. Consider the following examples


>>> print(Hello)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'Hello' is not defined >>> print(Hello World) File "<stdin>", line 1 print(Hello World) ^
SyntaxError: invalid syntax
>>> 

In both the examples above, unquoted strings cause errors. NameError in one case and SyntaxError in another. 

In this case, the fix is simple. Enclose the strings in quotes.

>>> print(‘Hello’)
Hello >>> print(‘Hello World’)
Hello World

Conclusion

Such errors will happen in the reader’s coding life. The important thing is to learn from it and move on.  Over time the reader will get better at coding, as they incorporate good coding habits. Such errors happen lesser and lesser as the reader gets more experienced.

Finxter Academy

This blog was brought to you by Girish, a student of Finxter Academy. You can find his Upwork profile here.

References

All research for this blog article was done using Python Documents, the Google Search Engine and the shared knowledge-base of the Finxter Academy and the Stack Overflow Communities. Concepts and ideas were also researched from the Boston University and Career Karma communities.

The post Python’s NameError: name ‘xxx’ is not defined — How to Fix This Stupid Bug? first appeared on Finxter.

Posted on Leave a comment

Freelance Developer Reddit — 30 Posts to Binge-Read

Writing this article, I must confess, was very challenging.

Not because the content is difficult to write about—be assured, it isn’t—but because it involves scrolling through Reddit to find the best posts, comments, and subreddits regarding freelance developing. Have you ever found yourself endlessly scrolling through Reddit?

Well—somehow I accomplished finishing this article despite the distractions on Reddit. A short summary of the three best and most general posts about freelance developing in Reddit:

Do you search for something more specific? Have a look at the table of contents and click on the topic that interests you most!

IF YOU CLICK ON ANY REDDIT SCREENSHOT, IT’LL OPEN THE POST IN A NEW TAB!

[Top 3] Freelance Developer Salary Reddit

[Top 3] Freelance Software Developer Reddit

[Top 3] Freelance iOS Developer Reddit

[Top 3] Freelance Back-End Developer Reddit

[Top 3] Freelance Front-End Developer Reddit

[Top 3] Freelance WordPress Developer Reddit

[Top 3] Freelance Game Developer Reddit

[Top 3] Freelance Python Developer Reddit

[Top 3] Freelance Android Developer Reddit


Do you want to develop the skills of a well-rounded Python professional—while getting paid in the process? Become a Python freelancer and order your book Leaving the Rat Race with Python on Amazon (Kindle/Print)!

Leaving the Rat Race with Python Book

The post Freelance Developer Reddit — 30 Posts to Binge-Read first appeared on Finxter.

Posted on Leave a comment

Godot 4 Sneak Peek: Particle Systems

Recently discussed on the Godot website, several new features have been added to the Godot 4 GPU accelerated particle systems. New features include:

  • support for sub-emitters
  • new collision systems
    • box and sphere colliders
    • height map colliders for outdoor maps
    • SDF colliders for internal meshes
  • new particle attractors

While we are going to have to wait until Godot 4 to get our hands-on the new Godot 4 in a production environment, we can check out the new GPUParticles3D node in action by building from the nightly source. That is exactly what we did in the video below, check it out for a preview and a mini tutorial on using particles in Godot 4.

[youtube https://www.youtube.com/watch?v=X8wNi6MX9mc?feature=oembed&w=1500&h=844]
Posted on Leave a comment

Freelance Developer Quora – The 4 Best Questions and Answers

Quora is an excellent source for information. However, it is safe to say that the vast majority of information on Quora is relatively low-quality. In this article, we compiled the best questions and great answers from Quora—all around the topic of freelance developing. So, let’s dive right into the first questions!

How Much Can a Web Developer Earn From Freelancing Websites?

Answer from “Anonymous” on Quora: (highlights by us)

There are many factors at play here so I will share my personal experience. I am based in the US. I began my freelancing career by building simple static websites in HTML, CSS, with a sprinkling of Javascript.

A typical website that took me 10–20 hours would earn me about $250 – 500.

I got most of my clients through Craigslist or though friends and family. As I progressed I started to learn PHP/MySQL, Javascript, JQuery, and in the past few years frameworks like React and Laravel.

I have a degree in computer science, so designing and building applications is more of my strength than building nice looking websites (although if I could do everything again I would have skipped college and just learned everything myself – I had already gotten through Calculus and AP science courses when I finished high school and the useful skills I learned at college I could have easily taught myself in 6–12 months, and I could have spent the remaining time becoming an expert in things like that would have tangible effects on my ability to earn income).

These days I have left behind the days of building simple websites and I now build web applications. This has allowed me to make far more income, sometimes over $200k US dollars per year.

I do not get work from sites like Upwork. The good, high playing clients with large budgets typically go through reputable agencies and most of my work I now do on a contract basis for agencies. I have gone from freelancing to essentially being a part time employee of two agencies, and they give me steady work. I do know other developers here in the US that build web applications on a freelance basis, and none of them earn less than $100k/yr unless they are having a slow year.

Note that here in the US at least earning $100k/yr freelancing is probably equivalent to a full time job with benefits that pays a $70k/yr salary because people who are not full time employees of a company pay far more in taxes and health insurance.

Link: https://www.quora.com/How-much-can-a-web-developer-earn-from-freelancing-websites

Related articles:

How Can I Start Freelancing as a Web Developer?

Answer from Rankit Sihmar:

Let’s face it. For starters, it can be done from nearly anywhere in the world, or right from the comfort of your own home. You also have the freedom to establish and control your own schedule, hourly rates and workflow. Last, but far from least, is the fact that web developers is one of the most in demand industry to be working in at the moment. The demand is only growing, so the potential to find clients and to have a lucrative career is strongly in your favor!

Here we can discuss some points that how to start freelancing as a web developer :

  1. Establish Your Brand : How are you going to brand yourself? Many freelance web designers use their name as their brand this is great and can lend real personal attachment. Alternatively, like I did, consider using a more formal name for your fledgling business, especially if you envisage your business becoming more robust in the future. If you have plans to maybe turn yourself into a studio, with a couple of people working for you, you might want to start out with a more formal company name. Think about how you would like to be perceived – as an individual brand, or as a young company. Think about what your potential clients will read into this and ask yourself whether that fits in with your view as a freelancer.
  2. Create Your Online Portfolio : One thing a client looks for in a potential freelancer is whether you’ll be able to deliver. If you’re new to freelancing, there’s a 90% chance you’ll lose out on projects to a more experienced freelancer. After all, clients are spending a lot of money on their projects, and they want every penny to count. Occasionally, though, a prospective client doesn’t just choose the most experience freelancer, but instead spends the time to review the profiles of other freelancers who offered to work at a lower rate. Now you have a chance to convince the client that you are worth a try. To make a great impression with the client, you need to have a convincing portfolio.
  3. Attend meetups : Social connection can have a drastic impact on your career growth. The more well connected you are, the more likely you are to get projects. While social networking sites can be a great way to interact with people and to make new connections. Attending technical meetups is another excellent way to interact with people and promote yourself. Meetups give you a chance to share your knowledge as well as learn new things from fellow attendees.
  4. Develop a Sales Cycle : So, you need to formalize a sales cycle a process for finding prospects, cultivating your relationship with them, educating them about your services, offering your services to the right ones, fulfilling their expectations, and developing that relationship with them. You’re going to need ways to find good prospects. Start by identifying your ideal client, who are they, what do they do and where do they hang out. Start hanging out there too and engaging them in conversation. Work on your elevator pitch – that little burst of information that explains clearly to potential clients how you can help their business and why they should hire you to do it.
  5. Organize a Routine : Your day is going to need structure. It’ll help you if you can have a consistent structure for your working day. Have a daily schedule mapped out which works around when you are most productive and when you are more likely to get things done. I try and group like tasks together – if I have a bunch of phone calls to make, I try and do them all mid-morning. Emails I typically handle mid-afternoon. If I’m coding, I find that easiest to do first thing in the morning when my brain is fresh, and, oddly, last thing in the evening when I get a second wind. Go with whatever works for you. But being able to stick to a similar routine each day will help you.
  6. Find Your Community and Work It : The great thing about being a freelance web designer is that there is a tremendous community of professionals who can support you in what you do. It’s a very open, communicative bunch of people. So start following people on Twitter, getting to know them on LinkedIn, Facebook and other social media hang outs. There are other people out there in similar situations and they have a lot to offer. LinkedIn offers a number of groups for freelance professionals. You establish your expertise and help people out who may be looking for your services. Be sure to get involved in the communities where you customers are. If you’re targeting a specific niche. Immerse yourself in the communities in which you operate and you’ll build up a really strong network – not just of other web designers but of potential clients and referrals.
  7. Market Your Services : To effectively market your freelance services, you should ask yourself, “Who is my target market?” If you’re passionate about one area of business or another that may help define your target market. Some sample target markets include:
  • Local small businesses that do not have an online presence yet
  • Non-profit organizations whose current websites are ineffective
  • Sales companies who don’t offer online purchasing

You can also target a single industry.

“Success builds on success”

As you go, always look for ways to turn your successes into lasting advantages that will help you get more business in the future.

Link: https://www.quora.com/How-can-I-start-freelancing-as-a-web-developer?page_size=10#!n=18

How Do You Price Freelance Web Development?

Answer from Desert Sun Studio on Quora.

Some people charge an hourly rate, around 75$-120$. I think this is too tedious, a root for arguments, and an incentive to not work as quickly as possible. I charge a fixed rate that is dependent on the project scope (am I designing all the pages, is it on a CMS like wordpress, do they want ‘out of the box’ features, etc). Then it is payed in two installments: half as a deposit for the design, half to develop and publish the page upon completion.

Link: https://www.quora.com/How-do-you-price-freelance-web-development?top_ans=159402565

How Do You Find Clients as a Freelance Web Developer?

Answer from Doug Kuhn on Quora.

From scratch, pretty much like any other job source, contact recruiters, peruse the want ads, the digital equivalent, craig’s list, Linkedin, Indeed, sometimes even news stories that mention a company and technologies that are inline with what I am capable of implementing.

If I get to the point where I know more of the specifics, such as, company projects specific to my nature, aware of direct people in charge of making hiring decisions, a specific project that has a direct sense of urgency, then I will by-pass conventional methods, such as going through a recruiter, throwing darts at the want ads, pushing out CVs in the dark and prepare a better script, for a specific person of the specific project that have specific needs.

I often find myself in the uncanny valley of optimization, with only 24 hours in a day, to either sharpen my technical understanding to the degree where I make myself indispensable to their needs or working on my golf swing, where I make myself known to the correct networks where the people in-charge of the actual decisions can be contacted directly.

This is difficult to pull off effectively, most of the time because with keeping up with tech and trying to backwards engineer not only the tech the target company deals with but moreover, the issues they are having with the tech and the problems they are facing which are often a proprietary secret that is not easily discerned. Or getting to know who is who in the selection game, by-passing the gate keepers, that just get in the way and to curry favor with the key masters that are the end-game target to land the contract.

In the end the term freelance, is essentially you are your own business, and either you have to outsource your own engineering department or marketing department or build them in-house, but it is hard to do both in-house without losing the integrity you need to excel at both.

Link: https://www.quora.com/How-do-you-find-clients-as-a-freelance-web-developer

Where to Go From Here?

Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

The post Freelance Developer Quora – The 4 Best Questions and Answers first appeared on Finxter.