Cheap or free functional programming for your team
This is an episode of Thoughts on Functional Programming, a podcast by Eric Normand.
Hiring an on-site trainer can be expensive. But training itself doesn't have to be expensive. In this episode, we go over 7 ways you can start training right away without breaking your budget.
Eric Normand: "How Can You Train Your Team in Functional Programming, on the Cheap."
By the end of this video, you'll have a list of ways that you can go find resources for teaching, without paying a trainer a huge amount of money.
My name is Eric Normand. I help people and companies thrive with functional programming.
I want to tell a little story just to motivate this. I was contacted by someone who wanted their team...He was a manager of a programming team. He wanted to bring Clojure into the enterprise. This was not a plan from higher up, it was his plan. He thought a good way would be to bring in a trainer.
He thought of me because I do training, I'll do remote, on-site training. This was not a local company. This was a company kind of far from where I live. Same continent but different country.
Anyway, he contacted me and we started talking about it. We eventually brought in the manager, who is the one to make the decision whether to spend the money. We talked, I figured out as best I could his needs. It was kind of clear that the manager did not have a pressing need to learn Clojure.
They didn't have some kind of plan to move to Clojure. It was much more like "Oh, Clojure might help us make better software." It's kind of a risk because they're not sure if it will, and they were doing fine already, they already had programmers proficient in other languages.
Not the clearest need. That was a bad sign. Because it was such a nebulous need, I was not very hopeful for it.
I sent them a proposal anyway, and my price...I'll just lay out the price that I sent them. It's \$25,000 for five days of training. They came back and said "No, it's too much." I was not surprised.
Usually when someone has a business need, like say "We're going to make \$10 million if we just learn Clojure, so let's just spend money to learn Clojure, and then we can use it to make this other money."
If they're going to make \$10 million, a \$25,000 fee to speed up the process does not seem too expensive. But, if you're just like, "Oh, maybe Clojure will help us," or, "My senior programmer really likes Clojure and he's convincing me, but I'm not \$25,000 convinced."
Anyway, they did not wind up using my services, but I had a bunch of recommendations for them which I am going to share with you today. Not everybody is ready. Not every company is ready to jump in and start spending money on functional programming. That doesn't mean that functional programming can't work for you, it just means you can't go for the premium options.
I've got a list of actually six things that we can do for helping you cheaply learn functional programming, teach functional programming to your team. They're the most expensive to the least expensive.
The first thing is, hire local people. When you do a search, you're going to get people like me who are out there, talking, blogging, podcasting and all those things. I am very vocal, because of that, I am the most Internet famous, I come up at the top, etc. I am not the most, but you know what I am saying, I'm up there.
People hear me talk, they're like, "I could imagine that guy coming and teaching us some Clojure." I come from far away. It's much cheaper to hire a local person. Look at all these costs that I built into that \$25,000.
When I do a training, I try to build in all the costs. A lot of people will say, "It's this much money plus expenses." I don't put the expenses separate. I put it all in the one number. It should be an easy calculation. Is that too much or too little, or enough? Is that just right or is it too much?
I had to pay for a plane, hotel or Airbnb maybe, a car sometimes. Even if there's no car, there's often travel to and from the airport. It's not free.
Then food while you're traveling is way more expensive. If I were to do a local gig, I wouldn't even think of food as an expense. Maybe I would spend \$10 for lunch. I wouldn't even include that.
When I have to go to either the supermarket because I'm trying to be thrifty, or I go to a restaurant to feed myself while I'm away from home, it's a different story. It starts to add up. If I'm there for five days, that's 15 meals. It's a lot.
Then there's some other things like I'd be away from work. I'll be away from my office, my studio. Even if I'm not working 24 hours a day, there's some things I can't do. There's an opportunity cost there. I have to build that in.
Then also time away from family. I know professionally, I shouldn't bring that up. I shouldn't say, "Well, I'm going to miss my daughter's birthday," or whatever. It's going to be more expensive. That's in there.
When I think about the price, if I have to fly away for a week and be away from my family, I am going to increase the price compared to being local where I can drive home at the end of the day.
I do not talk about that when I put that in the price, but it's real. I have to make it worth my time. When I'm away for five days, I usually have to get there the Sunday before. I leave early Saturday morning or late Friday night. I'm gone for approximately 6 times 24 hours. It's a whole range of time where I'm not seeing my family.
It's harder on my family because they have to pick up the slack of taking kids to school, doing the housework, all that stuff. It's all opportunity cost that I have to factor in. I'm not going to talk about how I do it. It's too much to tell.
That was my price, \$25,000 for five days of training. If you look at it as a day-rate, \$5,000 a day. I could easily see someone saying, "No, that's too much." I think there is still a bargain. If you're teaching 10 people, \$500 a day per person, it's not that much.
Anyway, I wanted to talk about all the fees, the expenses that have to be built into those fees. Hire local people. They are going to be much more willing. They're not going to pad their prices with plane, food, travel. It's going to be much easier.
They might not be as famous because they're not working on that part of it, but they could be really good. They might make the difference in price. Well, he's one-tenth the price. If he's half as good, we've already saved a lot.
Number two, host a free Clojure workshop. Free, meaning you invite people from the community to learn at your offices. You also invite your employees. Maybe they even get priority. Let's say you have 10 employees. You make the space available for 30 people. You have 20 people from the community, 10 of your employees, and you get trainers who are also from the local community.
Now, because it's free, the people who are volunteering to teach, they're volunteering. You don't have to pay them in the same way. You might want to provide lunch, and breakfast, and coffee and stuff like that, but that's going to be way cheaper than paying the individuals.
It becomes a community thing, so that people will want to participate for free. I think that this would be a great way to get Clojure into your team. The thing is it's probably going to do you on the weekend. You don't want to block the normal day of work. Most people aren't available except on the weekend, so there's constraints to it. You probably can't do a whole week of that.
You could do a weekend every month for three or four months. You get a lot of the benefit from it. You make it part of the community. That's another thing. It's like a community service, so you're killing two birds with one stone.
Number three, you might want to host the Clojure meetup. Let's say it starts at six o'clock, maybe seven o'clock. It's better. Work lets out at 5:00, starts at 7:00. You encourage the people in your company to stick around. You give them dinner, maybe some drinks, "Stick around tonight. Stay for the Clojure meetup. There's going to be a presentation. Learn some Clojure."
You could have a partnership with the meetup. There could be multiple venues for the meetup, and you're just one. If it's a monthly meetup and you have two companies that are going to trade off, that reduces the burden on you. The people who are in your company will be able to go to the other one and benefit that way. They might make friendships, so they're going to want to go to the other one.
You assign someone that topic to research. They're going to present it. Guess what. We're going to pay for lunch, so you don't have to go out on Friday. You don't have to go find your lunch. We're going to pay for it. Make it a nice healthy, nutritious lunch — not pizza, please — and just pay for the lunch.
They're going to stick around. They're going to talk. They're going to learn something new. Over time, you'll find that they learn a ton of stuff. One person is going to become a little bit more expert, the one who's teaching, but they are there at the company.
They still work there, so that knowledge will be at the company. They'll be able to share it over time. People will know they have it, so they'll know who to ask. It's a good thing.
I guess what I'm trying to say is it doesn't have to be something like, "Boom, five days, totally inject Clojure or Haskell into my team and make them experts all at once." It's something that should grow over time.
Let's just talk about the next one. This one is the first one that I'm talking about that's making it an environment for learning. Learning happens over time. It happens because of choices we make. The choices we make are often determined, or at least influenced, by our environment.
If we make the environment richer with functional programming materials and ideas, then we will learn more, naturally. Get some books. Put some functional programming books up around the place. Figure out the good ones for the language that you're interested in.
Encourage people to read at work. I know what it looks like when you're in a book at work. It looks like you're not working, but if I'm reading a blog post, it looks like I'm working. The thing is the book is probably a much better resource than the blog post.
That's another thing about environment. In culture, make sure people know that it's OK to read a technical book at work and increase their knowledge.
All right. Besides books, I have skin in the game of producing materials. I make Clojure videos. I have a membership where you pay monthly or yearly and you get access to over 80 hours of Clojure videos. It's at PurelyFunctional.tv.
There's a real benefit for getting something like a team plan where everyone on the team has access to the same materials. You're going to find that people can start referring to them. They're going to have a common vocabulary.
They are going to be able to link to them in the Slack and know that the other people have access, and can read it. They can just share those ideas a lot better than if everyone is just reading random stuff online. They're going to start to diverge in their opinions.
Blog posts are good. There's plenty of good, free resources. I'm just of the opinion as why I do it the way I do. I am of the opinion that when someone can focus on it and get paid to do it, it's going to be better quality. Check out PurelyFunctional.tv if you're interested in Clojure training.
One last thing, this would be number seven. There's a lot of community-run, Wiki-style documentation sites for tutorials and functional programming stuff. Encourage your team to contribute to those. It's free to do. It helps the community. It helps you learn.
You might say, "Well, I don't know how to do this thing. How can I write about it?" Well, you're the perfect person, because you can learn now and then, boom, encode it into a document that now people can use for a long time. Even your team can reuse it. I think those community efforts can pay back instantly when you work it the right way.
That was seven different things. I'm going to recap, now, the top three tips that go over all seven.
Use local resources. They're cheaper. They're just cheaper. You can probably barter a little bit, too. Tie it to the community that encourages people to be more generous.
If you're running a free workshop, the volunteers will be free. They'll give you a Saturday to help out the community, to help people out. Probably, when they were learning, they learn from free resources, so they're paying it forward. Encourage them. Help them out. They're doing this for free. Give them coffee. Give them food, etc.
Finally, set up the environment. That doesn't have to be expensive. For a few hundred dollars, you can have, let's say, \$30 a book. For \$300, you can have 10 awesome, functional programming books on your shelf. If you got Amazon Prime, in like two days. There's no reason that you couldn't get something like that approved. \$300, the best books on the topic. Why not?
I'll just go over the seven real quick. Hire local trainers, host a free Clojure workshop, host Clojure meetup, pay for a Lunch and Learn — that's a regular thing, once a week — get some books, then look into other training material, then encourage your team to learn and share back to the community with their blog or other community documentation sites.
Here's a challenge. This is a challenge that will help you. Find a meetup in your area and ask them for help. Ask them, "Hey, who can we hire for training?" Pick one of these seven things. "Hey, do you need a place to host a Clojure workshop?"
Go there, ask the people. Even if you don't go, you can contact the organizer on meetup.com. Check it out.
Now, do me a favor please. If you like this, if you appreciated this content, if you found it valuable, I always appreciate likes, plus ones, thumbs ups, hearts, favorites, retweets, reshares, upvotes. Whatever is in your social media app of choice, please comment and please subscribe, so you can get all of these nice episodes.
If you want to get in touch with me, if you have a question, if you have a suggestion, I love to get discussions. If you email me, I'll often incorporate it into the next episode. Then I record, because I love answering questions like that, sharing good questions. Email me at email@example.com. I'm @ericnormand on twitter. Don't forget the D.
Search for me on LinkedIn. That's Eric Normand. Thank you so much. I'll see you next time.