00:00:11.710
Okay, so today I'm going to talk about programming workout. Now, let's not start like that. Most of you know that yesterday there was a party, and many of you were probably there. There's a high probability that the party is still going on, so before I start, I need to say that I am very, very impressed by each and every one of you in this audience.
00:00:20.179
Well, you were partying last night. You should be tired right now; you probably didn’t get much sleep last night, and some of you might still have a bit of a hangover. Okay, so to make the start better and to help lift the gloomy atmosphere, I would like to conduct a small experiment. I need your help, just a little bit.
00:00:31.000
Could you please stand up for me right now? Seriously. Okay, just look around, but don’t spill your coffee. Let’s do two small things for all the impressive people around you. Look around and see those faces? Yes. First, let’s smile at them. And then, let’s give them a small applause.
00:00:50.780
Alright, seriously, you're awesome! Now you can sit back, relax, and enjoy the talk. I want to share with you an idea about programming workouts. What I mean by programming workout is basically a set of routines for developers to follow in order to become better developers. If you follow them consistently and regularly, you should become a better developer.
00:01:03.360
I know it might seem a bit cryptic right now and may not make much sense, but please bear with me for a moment, and I’ll explain in about 15 minutes. So, who am I? My name is Michał Taszycki. You can find me on Twitter and GitHub using the handle 'michałdy'. First, I would like to tell you a bit about my journey as a software developer.
00:01:21.800
It all started when I was in primary school, and I saw a screen like this. Do you recognize it? Yes, the Commodore 64. I still remember the first program I wrote: 10 PRINT "HELLO"; 20 GO TO 10. It was a pretty complicated task for that time. Back then, I used to type out programs that I found in magazines, which was not really creative work. But since then, everything progressed quickly.
00:01:44.000
I finished my studies and got my master's degree in Kraków. I also studied for a year in Scotland and then worked in a few corporations. In ABB, I worked on automated tests for Java Web Services. Then in Sabre, I was dealing with legacy code written in C++ over a ten-year period by different developers, which was quite amusing.
00:02:02.800
Eventually, I realized one of my childhood dreams and became a game developer. I worked in Scotland at Cohort Studios and in Warsaw on projects like MotorStorm, which was one of the first games on PlayStation 3, and also worked on porting Saints Row from Xbox to PC.
00:02:22.680
After that, I joined Applike and worked there for about three years as a Rails developer and sometimes as a project leader. I enjoy my work there. Additionally, I am a member of the software craftsmanship group in Kraków, where we organized the first code retreat last year, inviting Corey Haines, the creator of code retreat workshops.
00:02:40.180
We also participated in the global day of code retreat, where I was honored to lead the code retreat in Warsaw. It was a fantastic event happening in 90 different cities around the world, with over 200 developers participating, starting simultaneously at 9 PM.
00:02:57.600
Now, why am I telling you all of this? During my journey as a software developer, I have met many programmers, and as you know, they are perfectly normal people. I’ve encountered a lot of good developers, some not-so-great programmers, but I’ve also met a few exceptional ones.
00:03:16.800
For instance, there’s John Carmack, the genius behind classic games like Quake, Doom, and Wolfenstein, among others. He’s a truly exceptional programmer. Another well-known figure is Gary Bernhardt, whom I had the opportunity to meet in Amsterdam. However, I didn’t realize just how impressive he was until I watched his Destroy All Software screencasts.
00:03:33.000
If you haven’t seen them, I highly recommend you subscribe. If you can't afford to, consider canceling your Spotify subscription and getting access to his screencasts instead—you will thank me later. Gary is a magician with programming.
00:03:52.600
Through my interactions with exceptional programmers, I noticed that they often appeared normal from the outside. However, when you see them at work, they display remarkable skills, consistently finding excellent solutions to problems. They work quickly, efficiently, and are masters of various aspects of development.
00:04:11.860
They have mastered their tools, programming languages, and, in some cases, they excel in specific areas like quick adaptations to new things. So, you might be tempted to attribute their skills to talent. But I believe this perception is misleading.
00:04:27.580
Talent is often seen as something you're born with or predisposed to. Everyone has some degree of talent; however, I suggest we look deeper. Reflect on your time in primary school—did you have a subject where you felt particularly gifted?
00:04:40.780
For example, many of you might have found math easy. But did this perception change when you entered high school? Did you find subjects becoming harder, requiring more effort to achieve the same level of proficiency?
00:04:57.890
I discovered that there are a few key qualities that define exceptional developers. First is having a clear vision. This means understanding what you want to be, what you want to become, and how you intend to get there. This clear vision enables you to extract actionable goals that help you move forward.
00:05:16.910
One trait we've noticed in these exceptional developers is their commitment to hard work. In my opinion, hard work is often underrated. There’s a misconception that programmers are lazy. It’s time to challenge this assumption.
00:05:36.440
While we benefit from fantastic tools and IDEs that make coding easier, we must not neglect the importance of hard work. It can sometimes feel as if we no longer need to remember variable names or framework methods because resources like Google and Stack Overflow provide quick answers.
00:05:52.930
I’m not arguing against convenience. But as a consequence, we might not remember things as we once did, and that’s a skill we risk losing if we don’t practice it. Learning to work hard is vital in all areas of our lives.
00:06:11.190
Speaking of hard work, do you remember Agatha's lightning talk from yesterday? She talked about her colleague Basia, who consistently receives compliments from clients for her excellent work. Agatha mentioned Basia didn't understand why. Well, I believe I can shed light on that.
00:06:25.030
The answer is that Basia is a hard worker. She manages to accomplish a lot of mundane tasks quickly and effectively, and she doesn’t become fatigued by them. Hard work isn't a talent; it's a skill that can be developed.
00:06:41.640
Now that we’ve talked about the qualities of exceptional developers, how do we go about becoming one? It may sound simple, but it's not easy. Creating a clear path to enhance our skills is not always straightforward.
00:06:58.950
When observing other developers, it’s not always clear what they did to reach their level of proficiency. So let’s look at another group of people we perceive as exceptional: athletes. Think of your favorite athlete, whether they be a soccer player, boxer, runner, or gymnast.
00:07:16.580
Now, let's focus on a specific athlete. Do you recognize this individual? It’s Arnold Schwarzenegger, the former Governor of California, but he’s best known as one of the most accomplished bodybuilders in the world. He’s achieved numerous goals—among them is his aspiration to be president of the United States.
00:07:35.490
Schwarzenegger exemplifies the four qualities I mentioned earlier: he has a clear vision, knows what he wants to achieve, knows how to extract goals from that vision, and is a remarkable hard worker. People who trained with him in the gym observed his exceptional work ethic.
00:07:53.350
This strong work ethic translates into all aspects of life. Exceptional athletes develop their skills through consistent workouts—training their muscles and honing their skills. Why can't we apply this same idea to our programming skills?
00:08:11.430
Let's explore how we can create our own programming workout routine. It's quite simple: you pick exercises, group them, perform them, rest, and start all over again. You can work out whenever you feel comfortable—whether you are a morning person or prefer to work late.
00:08:29.860
The key is to set a regular schedule. Aim for a couple of times a week for a workout. Each session can last anywhere from half an hour to one and a half hours—equivalent to one, two, or three Pomodoros, if you know what I mean.
00:08:44.900
When considering physical workouts, there are well-established theories regarding workout design. One could dive deep into literature on the subject, but we can also stick to simpler exercises to start with. So how can we define the programming skills we want to train?
00:09:05.270
I propose categorizing our skills into primary and secondary skills. Primary skills directly contribute to achieving our goals. Depending on your objectives, for becoming a good developer, key areas to focus on could include debugging, test-driven development, refactoring, and understanding different programming paradigms.
00:09:19.960
Additionally, mastering your programming language and frameworks is essential. If you want to get comfortable with Ruby on Rails, for instance, practice generating a Rails installation multiple times until it's second nature.
00:09:41.090
Secondary skills also aid in your development journey, albeit indirectly. For instance, touch typing can significantly enhance your productivity along with IDE mastery. Familiarity with keyboard shortcuts and command-line fundamentals will increase your workflow efficiency.
00:09:58.700
Can you navigate your shell and perform commands without needing a mouse? Skills such as source control proficiency and quick reading are vital as well. So, let’s develop a sample workout template—consider a weekly plan.
00:10:17.540
On Monday, for example, start your day with 15 minutes of touch typing, aiming for accuracy—try to make as few mistakes as possible. Next, switch to refactoring, picking a small segment of source code to practice the extract method—complete all steps manually without an IDE, and then revert the changes and repeat.
00:10:34.570
If you emulate the way athletes train—performing sets and repetitions—you might do three sets of two repetitions with rests in between. Following refactoring, consider doing some Vim practice—again, five sets of three repetitions tailored to a challenge.
00:10:55.300
Focus on various techniques and gradually increase your speed with certain commands. This repetition will engrain best practices into your muscle memory for more efficient coding sessions.
00:11:08.490
For Wednesday, you could do another 15 minutes of touch typing, primarily focusing on speed rather than accuracy. Then, engage in legacy code practice—select a technique from literature or resources that specialize in dealing with legacy systems.
00:11:26.540
For example, pick a technique detailed in Martin Fowler's book on effective legacy code management and practice it with several repetitions. Another exercise could be a programming kata, where your goal should be to create a small program with optimal coding practices.
00:11:40.240
If you prefer Friday, consider another touch typing session with a focus on difficult characters, such as brackets; you could also practice the 'tell, don't ask' principle by refactoring existing code. The goal is to make compliance with this principle your objective.
00:11:57.570
The precise details of your workout can differ. For example, if you're working on a particular language, pick challenges that require mastery, whether from coding challenges like Project Euler or specialized puzzles from various reputable sources.
00:12:12.150
Remember, it doesn't have to look exactly like I described—it can be a dedicated session for touch typing or debugging. Just as running for half an hour counts as a workout, so does half an hour dedicated to touch typing.
00:12:28.420
Next, you must measure your accomplishments. Monitoring your progress during each exercise is essential. Track your times, repetitions, and success rates. For example, how many refactorings can you accomplish within five minutes?
00:12:43.040
None of these measures must be overly complicated. Sometimes you can record screencasts of your coding. Assess your flow, think critically about what you can improve, and repeat the process.
00:13:02.190
Every workout should be tailored to your individual strengths and weaknesses. For example, if you can touch type small letters but struggle with uppercase letters or symbols, be conservative in your expectations.
00:13:18.910
Find a skill that's slightly above your comfort level, workout with that skill via repetitions, and only when you're confident should you gradually elevate the challenge.
00:13:36.320
You might wonder where to find ideas for workout routines. There are many resources available. For instance, if you want to master Vim, check the Vim Golf page or watch Vim casts to enhance your skills.
00:13:52.020
Engage with what experts share. If you attended any good workshops recently, practice what you learned. Use resources like Rubicon or Project Euler for challenges that sharpen your programming prowess.
00:14:06.230
Watching screencasts from seasoned programmers can be profoundly insightful. Not only will you learn techniques, but you’ll also witness different problem-solving approaches.
00:14:23.670
Commingle with developers, as a community can foster success. Look at other coders in action; that competition can be motivating.
00:14:36.920
Having a workout buddy is also beneficial. They can provide encouragement when motivation wanes—like when you'd rather not go to the gym. They will nudge you, reminding you to stick to your goals.
00:14:50.790
Furthermore, seek knowledge sharing among peers. Share workout goals, templates, and progress updates. Collaboration can strengthen your skills.
00:15:02.730
The bottom line is simple: if you like these ideas and want to become a better developer, I’d love to help build a community of like-minded individuals. I’m starting a project called Programming Workout.
00:15:19.590
If you're interested, visit programmingworkout.com and leave your email. Upon readiness, I'll share sample workout routines.
00:15:36.200
These will consist of structured exercises for three days a week—Monday, Wednesday, and Friday. If someone prefers not to create their own workout, they can follow guidance provided on the site.
00:15:52.750
In the future, I aim to create a vibrant and interactive platform for discussing programming workouts and sharing ideas. Working together with a substantial community, we can not only measure progress but also optimize our learning path.
00:16:05.820
If this resonates with you, don’t hesitate to contact me on Twitter or leave your email address. If you have any inquiries or topics you want to discuss, feel free to reach out.
00:16:19.200
That’s all I wanted to share with you today, so thank you for coming and paying attention. If you have any questions, I’ll be happy to answer them now.
00:16:38.570
(Q&A session begins)