[{"data":1,"prerenderedAt":2687},["Reactive",2],{"navigation":3,"aAII9Cz3yR":204,"tags-thoughts":397},[4,192,200],{"title":5,"_path":6,"children":7,"icon":191},"Blog","/posts",[8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188],{"title":9,"_path":10},"Testing your API with REST Client","/posts/testing-your-api-with-rest-client",{"title":12,"_path":13},"HTML templating in Xamarin","/posts/html-templating-in-xamarin",{"title":15,"_path":16},"Goodbye Azure Portal, Welcome Azure CLI","/posts/welcome-azure-cli",{"title":18,"_path":19},"Coming across Gitpod","/posts/gitpod",{"title":21,"_path":22},"Handle token retrieval while querying an API","/posts/delegating-handler",{"title":24,"_path":25},"Clean up your local git branches.","/posts/cleaning-git-branches",{"title":27,"_path":28},"Automate configuration of Teams Tab SSO with PowerShell.","/posts/teams-sso-powershell",{"title":30,"_path":31},"How to do a technology watch? - Part 1","/posts/technology-watch-part1",{"title":33,"_path":34},"How to do a technology watch? - Part 2","/posts/technology-watch-part2",{"title":36,"_path":37},"You almost no longer need Key Vault references for Azure Functions.","/posts/azure-functions-custom-configuration",{"title":39,"_path":40},"How to do a technology watch? - Part 3","/posts/technology-watch-part3",{"title":42,"_path":43},"Forget DevOps, the future is already here!","/posts/devops-future",{"title":45,"_path":46},"Week 9, 2021 - Tips I learned this week","/posts/w09-2021-tips-learned-this-week",{"title":48,"_path":49},"Week 12, 2021 - Tips I learned this week","/posts/w12-2021-tips-learned-this-week",{"title":51,"_path":52},"Week 14, 2021 - Tips I learned this week","/posts/w14-2021-tips-learned-this-week",{"title":54,"_path":55},"Once upon a time in .NET","/posts/once-upon-a-time-in-dotnet",{"title":57,"_path":58},"Install your applications with winget","/posts/winget-import",{"title":60,"_path":61},"Customize your applications when installing them with winget","/posts/winget-override",{"title":63,"_path":64},"Week 22, 2021 - Tips I learned this week","/posts/w22-2021-tips-learned-this-week",{"title":66,"_path":67},"How to connect to an Azure SQL Database from C# using Azure AD","/posts/sqlclient-active-directory-authent",{"title":69,"_path":70},"Producing packages for Windows Package Manager","/posts/wingetcreate",{"title":72,"_path":73},"4 tips about GitHub Actions environment variables and contexts","/posts/github-actions-var-and-context",{"title":75,"_path":76},"AzureWebJobsStorage, the secret you don't need in your Function App.","/posts/azure-functions-without-azurewebjobsstorage",{"title":78,"_path":79},"ASP.NET Core - Lost in configuration","/posts/lost-in-configuration",{"title":81,"_path":82},"Week 39, 2021 - Tips I learned this week","/posts/w39-2021-tips-learned-this-week",{"title":84,"_path":85},"Week 41, 2021 - Tips I learned this week","/posts/w41-2021-tips-learned-this-week",{"title":87,"_path":88},"Migrating and open-sourcing my blog","/posts/migrating-blog",{"title":90,"_path":91},"Week 45, 2021 - Tips I learned this week","/posts/w45-2021-tips-learned-this-week",{"title":93,"_path":94},"Organize your GitHub stars with Astral","/posts/astral",{"title":96,"_path":97},"Pulumi with an Azure Blob Storage backend","/posts/pulumi-azure-backend",{"title":99,"_path":100},"IaC Hot Reload with Pulumi Watch","/posts/pulumi-watch",{"title":102,"_path":103},"Week 2, 2022 - Tips I learned this week","/posts/w02-2022-tips-learned-this-week",{"title":105,"_path":106},"Week 3, 2022 - Tips I learned this week","/posts/w03-2022-tips-learned-this-week",{"title":108,"_path":109},"Week 5, 2022 - Tips I learned this week","/posts/w05-2022-tips-learned-this-week",{"title":111,"_path":112},"How to provision an Azure SQL Database with Active Directory authentication","/posts/sqldatabase-active-directory-authent",{"title":114,"_path":115},"Why will I choose Pulumi over Terraform for my next project?","/posts/pulumi-vs-terraform",{"title":117,"_path":118},"Week 19, 2022 - Tips I learned this week","/posts/w19-2022-tips-learned-this-week",{"title":120,"_path":121},"Week 20, 2022 - Tips I learned this week","/posts/w20-2022-tips-learned-this-week",{"title":123,"_path":124},"Keeping secrets secure when using API Clients","/posts/http-clients-secrets",{"title":126,"_path":127},"What made me want to be a developer?","/posts/be-a-developer",{"title":129,"_path":130},"What can we do when stuck with a programming problem?","/posts/get-unstuck",{"title":132,"_path":133},"How did I automate the setup of my developer Windows laptop?","/posts/automate-developer-machine",{"title":135,"_path":136},"Discussion about API clients","/posts/http-clients",{"title":138,"_path":139},"Week 46, 2022 - Tips I learned this week","/posts/w46-2022-tips-learned-this-week",{"title":141,"_path":142},"When Pulumi met Nuke: a .NET love story","/posts/when-pulumi-met-nuke",{"title":144,"_path":145},"A year of learning and sharing - Dev Retro 2022","/posts/2022-retro",{"title":147,"_path":148},"Perform Dynamic Execution of an npm Package","/posts/pnpm-dlx",{"title":150,"_path":151},"Manage multiple Node.js versions","/posts/pnpm-env",{"title":153,"_path":154},"Introducing the Vue.js CI/CD series","/posts/vuecicd-introduction",{"title":156,"_path":157},"Execute commands using your project dependencies","/posts/pnpm-exec",{"title":159,"_path":160},"Vue.js CI/CD: Continuous Integration","/posts/vuecicd-ci",{"title":162,"_path":163},"Who is using pnpm?","/posts/pnpm-who-is-using",{"title":165,"_path":166},"Create an Azure-Ready GitHub Repository using Pulumi","/posts/azure-ready-github-repository",{"title":168,"_path":169},"Deploying to Azure from Azure DevOps without secrets","/posts/ado-workload-identity-federation",{"title":171,"_path":172},"Effortlessly Configure GitHub Repositories for Azure Deployment via OIDC","/posts/scripting-azure-ready-github-repository",{"title":174,"_path":175},"Playing with the .NET 8 Web API template","/posts/playing-with-dotnet8",{"title":177,"_path":178},"Another year of sharing and learning - Dev Retro 2023","/posts/2023-retro",{"title":180,"_path":181},"Week 4, 2024 - Tips I learned this week","/posts/w04-2024-tips-learned-this-week",{"title":183,"_path":184},"Using dependency injection with Azure .NET SDK","/posts/azure-sdk-di",{"title":186,"_path":187},"Having Fun With IT Event Calendars","/posts/it-event-calendars",{"title":189,"_path":190},"Call your Azure AD B2C protected API with authenticated HTTP requests from your JetBrains IDE","/posts/http-clients-oauth2","i-heroicons-newspaper",{"title":193,"_path":194,"children":195,"icon":199},"Goodies","/goodies",[196],{"title":197,"_path":198},"My Git Cheat Sheet","/goodies/gitcheatsheet","i-heroicons-gift-solid",{"title":201,"_path":202,"icon":203},"About","/about","i-heroicons-user-circle-solid",[205,207,209,211,214,217,220,223,226,229,231,234,237,240,242,244,247,250,253,255,258,261,264,267,270,273,276,279,282,285,287,289,292,294,297,300,303,305,308,310,313,316,319,322,325,327,329,332,335,338,341,344,347,350,353,356,359,361,363,366,369,372,375,377,380,383,385,388,391,394],[206,206],"tooling",[208,208],"vscode",[210,210],"rest",[212,213],"http","HTTP",[215,216],"razor","Razor",[218,219],"xamarin","Xamarin",[221,222],"templating","Templating",[224,225],"azure-cli","Azure CLI",[227,228],"azure","Azure",[230,230],"shell",[232,233],"github","GitHub",[235,236],"asp-net-core","ASP.NET Core",[238,239],"net",".NET",[241,241],"git",[243,243],"nushell",[245,246],"microsoft-teams","Microsoft Teams",[248,249],"powershell","PowerShell",[251,252],"azure-active-directory","Azure Active Directory",[254,254],"learning",[256,257],"azure-functions","Azure Functions",[259,260],"azure-key-vault","Azure Key Vault",[262,263],"configuration","Configuration",[265,266],"devops","DevOps",[268,269],"it","IT",[271,272],"tips-learned-this-week","tips learned this week",[274,275],"windows-terminal","Windows Terminal",[277,278],"azure-pipelines","Azure Pipelines",[280,281],"application-insights","Application Insights",[283,284],"azure-iot","Azure IoT",[286,286],"records",[288,288],"refit",[290,291],"development-box-setup","development box setup",[293,293],"winget",[295,296],"package-manager","package manager",[298,299],"azure-sql-database","Azure SQL Database",[301,302],"azure-sdk","Azure SDK",[304,304],"wingetcreate",[306,307],"github-actions","GitHub Actions",[309,309],"jq",[311,312],"pulumi","Pulumi",[314,315],"iac","IaC",[317,318],"azure-storage","Azure Storage",[320,321],"azure-signalr","Azure SignalR",[323,324],"visio","Visio",[326,326],"csharp",[328,328],"jest",[330,331],"statiq","Statiq",[333,334],"open-source","open source",[336,337],"visual-studio","Visual Studio",[339,340],"vue-js","Vue.js",[342,343],"azure-devops","Azure DevOps",[345,346],"vite","Vite",[348,349],"code-analysis","Code analysis",[351,352],"diagram","Diagram",[354,355],"terraform","Terraform",[357,358],"typescript","TypeScript",[360,360],"thoughts",[362,362],"pnpm",[364,365],"nuke","Nuke",[367,368],"pipelines","Pipelines",[370,371],"cicd","CI/CD",[373,374],"openid-connect","OpenID Connect",[376,376],"security",[378,379],"github-cli","GitHub CLI",[381,382],"microsoft-entra-id","Microsoft Entra ID",[384,384],"advent",[386,387],"finops","FinOps",[389,390],"anglesharp","AngleSharp",[392,393],"oauth2","OAuth2",[395,396],"azure-ad-b2c","Azure AD B2C",[398,984,1433,2095,2493],{"_path":178,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":177,"description":402,"lead":403,"date":404,"image":405,"badge":407,"tags":409,"ImageAttribution":410,"body":411,"_type":979,"_id":980,"_source":981,"_file":982,"_extension":983},"posts",false,"","Last year, I wrote my first annual retrospective. It was an interesting exercise that I intend to do every year. So for 2023, here is my year in review.","Challenges and achievements of 2023","2024-01-02T00:00:00.000Z",{"src":406},"/images/review_1.jpg",{"label":408},"Essay",[360,254],"Picture of \u003Ca href=\"https://unsplash.com/fr/@markuswinkler?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Markus Winkler\u003C/a> on \u003Ca href=\"https://unsplash.com/fr/photos/-fRAIQHKcc0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash\u003C/a>",{"type":412,"children":413,"toc":970},"root",[414,433,440,453,488,493,526,531,537,542,570,583,595,618,623,640,645,650,656,661,666,675,680,693,724,747,756,770,776,781,804,809,814,824,847,852,931,937,942,947,965],{"type":415,"tag":416,"props":417,"children":418},"element","p",{},[419,422,431],{"type":420,"value":421},"text","Last year, I wrote my ",{"type":415,"tag":423,"props":424,"children":428},"a",{"href":425,"rel":426},"https://www.techwatching.dev/posts/2022-retro",[427],"nofollow",[429],{"type":420,"value":430},"first annual retrospective",{"type":420,"value":432},". It was an interesting exercise that I intend to do every year. So for 2023, here is my year in review.",{"type":415,"tag":434,"props":435,"children":437},"h2",{"id":436},"plans-for-2023-versus-reality",[438],{"type":420,"value":439},"Plans for 2023 versus reality",{"type":415,"tag":416,"props":441,"children":442},{},[443,445,451],{"type":420,"value":444},"My plans for 2023 that I shared in ",{"type":415,"tag":423,"props":446,"children":448},{"href":425,"rel":447},[427],[449],{"type":420,"value":450},"my 2022 retro",{"type":420,"value":452}," were to:",{"type":415,"tag":454,"props":455,"children":456},"ul",{},[457,463,468,473,478,483],{"type":415,"tag":458,"props":459,"children":460},"li",{},[461],{"type":420,"value":462},"keep learning about Vue.js and Nuxt.js",{"type":415,"tag":458,"props":464,"children":465},{},[466],{"type":420,"value":467},"explore Azure Container Apps and Dapr",{"type":415,"tag":458,"props":469,"children":470},{},[471],{"type":420,"value":472},"keep writing articles on my blog about topics I am interested in",{"type":415,"tag":458,"props":474,"children":475},{},[476],{"type":420,"value":477},"keep sharing links and tips on social networks",{"type":415,"tag":458,"props":479,"children":480},{},[481],{"type":420,"value":482},"improve my use of PKM tools like Obsidian",{"type":415,"tag":458,"props":484,"children":485},{},[486],{"type":420,"value":487},"give at least 1 talk at a developer conference",{"type":415,"tag":416,"props":489,"children":490},{},[491],{"type":420,"value":492},"I must admit that I didn't fully achieve my goals:",{"type":415,"tag":454,"props":494,"children":495},{},[496,501,506,511,516,521],{"type":415,"tag":458,"props":497,"children":498},{},[499],{"type":420,"value":500},"I continued learning Vue.js and Nuxt.js but not as extensively as I would have hoped",{"type":415,"tag":458,"props":502,"children":503},{},[504],{"type":420,"value":505},"I didn't dive deeply into Azure Container Apps and Dapr although I did experiment with them a bit",{"type":415,"tag":458,"props":507,"children":508},{},[509],{"type":420,"value":510},"I wrote articles on my blog but fewer than in the previous years",{"type":415,"tag":458,"props":512,"children":513},{},[514],{"type":420,"value":515},"I shared links and tips on social networks but not consistently",{"type":415,"tag":458,"props":517,"children":518},{},[519],{"type":420,"value":520},"I took my notes using Obsidian, but I haven't utilized it as a true PKM tool",{"type":415,"tag":458,"props":522,"children":523},{},[524],{"type":420,"value":525},"I did give several talks at various developer conferences (more on that later)",{"type":415,"tag":416,"props":527,"children":528},{},[529],{"type":420,"value":530},"It's not a big deal that I didn't accomplish everything. My primary goal for 2023 was for it to be a year of learning and sharing, just like in 2022. And I succeeded in doing that. 2023 was another year of learning and sharing, and it also provided numerous speaking opportunities. This is one of the reasons why I didn't have the time to do everything I planned.",{"type":415,"tag":434,"props":532,"children":534},{"id":533},"public-speaking",[535],{"type":420,"value":536},"Public speaking",{"type":415,"tag":416,"props":538,"children":539},{},[540],{"type":420,"value":541},"In 2022, I gave my first talk at a developer conference (online). In 2023, I had the opportunity to speaker at five French developer conferences:",{"type":415,"tag":454,"props":543,"children":544},{},[545,550,555,560,565],{"type":415,"tag":458,"props":546,"children":547},{},[548],{"type":420,"value":549},"Global Azure France in Paris - May 2023",{"type":415,"tag":458,"props":551,"children":552},{},[553],{"type":420,"value":554},"Cloud Est in Lyon - June 2023",{"type":415,"tag":458,"props":556,"children":557},{},[558],{"type":420,"value":559},"Breizh Camp in Rennes - June 2023",{"type":415,"tag":458,"props":561,"children":562},{},[563],{"type":420,"value":564},"BDX I/O in Bordeaux - November 2023",{"type":415,"tag":458,"props":566,"children":567},{},[568],{"type":420,"value":569},".NET Conf 2023 with MTG (online) - December 2023",{"type":415,"tag":416,"props":571,"children":572},{},[573,575,581],{"type":420,"value":574},"The first three talks focused on Infrastructure as Code in general, and more specifically on ",{"type":415,"tag":423,"props":576,"children":579},{"href":577,"rel":578},"https://www.pulumi.com/",[427],[580],{"type":420,"value":312},{"type":420,"value":582},". I particularly enjoyed speaking at Breizh Camp, as many people attended my talk 🥰 and the organization was excellent.",{"type":415,"tag":416,"props":584,"children":585},{},[586],{"type":415,"tag":587,"props":588,"children":594},"img",{"alt":589,"className":590,"src":593},"Screenshot of talk record at Breizh Camp",[591,592],"rounded-lg","mx-auto","/posts/images/2022_retro_talk.webp",[],{"type":415,"tag":416,"props":596,"children":597},{},[598,600,607,609,616],{"type":420,"value":599},"The fourth talk showcased ",{"type":415,"tag":423,"props":601,"children":604},{"href":602,"rel":603},"https://sli.dev/",[427],[605],{"type":420,"value":606},"slidev",{"type":420,"value":608},", a tool for developers by ",{"type":415,"tag":423,"props":610,"children":613},{"href":611,"rel":612},"https://antfu.me/",[427],[614],{"type":420,"value":615},"Anthony Fu",{"type":420,"value":617}," that allows creating slides in markdown (and using web technologies). It was a 15-minute talk titled \"Oops, I Forgot to Make My Slides,\" during which a friend helped me create my slides about Vue 3 on stage. It was an incredibly fun talk to prepare and deliver. I cannot thank my co-speaker Xavier Noya enough for agreeing to do this talk with me. Additionally, I was delighted to be a speaker at this fantastic conference that takes place in my hometown.",{"type":415,"tag":416,"props":619,"children":620},{},[621],{"type":420,"value":622},"The last talk was online (for a French event related to the .NET Conf 2023). It concentrated on the new features of C# 12 and .NET 8, and demonstrated how to implement Infrastructure as Code (IaC) using .NET.",{"type":415,"tag":624,"props":625,"children":627},"callout",{"icon":626},"i-heroicons-film",[628],{"type":415,"tag":416,"props":629,"children":630},{},[631,633],{"type":420,"value":632},"The talks I gave are all in French, but if you are interested some of them have been ",{"type":415,"tag":423,"props":634,"children":637},{"href":635,"rel":636},"https://drp.li/f7I9N",[427],[638],{"type":420,"value":639},"recorded",{"type":415,"tag":416,"props":641,"children":642},{},[643],{"type":420,"value":644},"I am incredibly proud of the numerous speaking opportunities I've had. While it may not seem impressive to experienced speakers, it means a lot to me. I am truly grateful for the chance to speak at these events and to have attended some fantastic talks as well.",{"type":415,"tag":416,"props":646,"children":647},{},[648],{"type":420,"value":649},"Developer conferences' Call for Papers are highly selective, and they always receive many excellent proposals. Thus, I have no idea if I will be able to speak at multiple conferences in 2024, but I will certainly do my best.",{"type":415,"tag":434,"props":651,"children":653},{"id":652},"blogging",[654],{"type":420,"value":655},"Blogging",{"type":415,"tag":416,"props":657,"children":658},{},[659],{"type":420,"value":660},"In 2023, I \"only\" wrote 11 articles on my blog, which is fewer than the 15 articles I wrote in 2022 and significantly less than the 19 articles in 2021.",{"type":415,"tag":416,"props":662,"children":663},{},[664],{"type":420,"value":665},"For some of my articles, I created a GitHub repository with the code samples used in the article. That's something I intend to do more.",{"type":415,"tag":416,"props":667,"children":668},{},[669],{"type":415,"tag":587,"props":670,"children":674},{"alt":671,"className":672,"src":673},"Example of GitHub repository sample code for article.",[591,592],"/posts/images/2022_retro_github.webp",[],{"type":415,"tag":416,"props":676,"children":677},{},[678],{"type":420,"value":679},"My blog's traffic decreased a little (not enough articles this year I guess):",{"type":415,"tag":454,"props":681,"children":682},{},[683,688],{"type":415,"tag":458,"props":684,"children":685},{},[686],{"type":420,"value":687},"27K users vs 28K",{"type":415,"tag":458,"props":689,"children":690},{},[691],{"type":420,"value":692},"27K pages seen vs 37K",{"type":415,"tag":416,"props":694,"children":695},{},[696,698,705,707,714,716,722],{"type":420,"value":697},"I kept cross-posting all my articles on ",{"type":415,"tag":423,"props":699,"children":702},{"href":700,"rel":701},"https://techwatching.hashnode.dev/",[427],[703],{"type":420,"value":704},"Hashnode",{"type":420,"value":706}," and ",{"type":415,"tag":423,"props":708,"children":711},{"href":709,"rel":710},"https://dzone.com/users/4682620/techwatching.html",[427],[712],{"type":420,"value":713},"dev.to",{"type":420,"value":715},", and published two of them on ",{"type":415,"tag":423,"props":717,"children":719},{"href":709,"rel":718},[427],[720],{"type":420,"value":721},"DZone",{"type":420,"value":723},".",{"type":415,"tag":416,"props":725,"children":726},{},[727,729,736,738,745],{"type":420,"value":728},"Together with a friend, we initiated a ",{"type":415,"tag":423,"props":730,"children":733},{"href":731,"rel":732},"https://bordeauxcoders.com/series/pnpm-101",[427],[734],{"type":420,"value":735},"blog post series about pnpm",{"type":420,"value":737}," on a new team blog called \"",{"type":415,"tag":423,"props":739,"children":742},{"href":740,"rel":741},"https://bordeauxcoders.com/",[427],[743],{"type":420,"value":744},"Bordeaux Coders",{"type":420,"value":746},"\". It was enjoyable, but our motivation waned after the summer. We need to regain our motivation, start writing again, and perhaps find others interested in collaborating on this blog.",{"type":415,"tag":416,"props":748,"children":749},{},[750],{"type":415,"tag":587,"props":751,"children":755},{"alt":752,"className":753,"src":754},"Screenshot of th Bordeaux Coders' blog",[591,592],"/posts/images/2022_retro_blog.webp",[],{"type":415,"tag":416,"props":757,"children":758},{},[759,761,768],{"type":420,"value":760},"I have also co-authored an ",{"type":415,"tag":423,"props":762,"children":765},{"href":763,"rel":764},"https://www.avanade.com/fr-fr/blogs/le-blog/life-at-avanade/notre-expertise-au-service-des-nouvelles-generations",[427],[766],{"type":420,"value":767},"article on my company's blog",{"type":420,"value":769}," about something I have been doing for 5 years now: overseeing student projects at my former engineering school.",{"type":415,"tag":434,"props":771,"children":773},{"id":772},"school-relationships-and-teaching",[774],{"type":420,"value":775},"School Relationships and Teaching",{"type":415,"tag":416,"props":777,"children":778},{},[779],{"type":420,"value":780},"As I mentioned, this year I once again supervised a group of students on a small software development project over a few months. This experience provided the opportunity to:",{"type":415,"tag":454,"props":782,"children":783},{},[784,789,794,799],{"type":415,"tag":458,"props":785,"children":786},{},[787],{"type":420,"value":788},"Explore new tools and technologies",{"type":415,"tag":458,"props":790,"children":791},{},[792],{"type":420,"value":793},"Share knowledge with students and learn from them as well",{"type":415,"tag":458,"props":795,"children":796},{},[797],{"type":420,"value":798},"Grow (by wearing different hats and utilizing educational management skills)",{"type":415,"tag":458,"props":800,"children":801},{},[802],{"type":420,"value":803},"Promote my company's expertise and attract future talent",{"type":415,"tag":416,"props":805,"children":806},{},[807],{"type":420,"value":808},"For the first time, in 2023, I taught a DevOps course at the same engineering school. It was an optional module on DevOps practices for 2nd-year students.",{"type":415,"tag":416,"props":810,"children":811},{},[812],{"type":420,"value":813},"Building relationships with schools takes time and isn't always easy, but I enjoy doing it (and I'm not alone, as I have colleagues who help me). Unfortunately, I am uncertain whether my company will continue supporting me in this area next year, so I don't know what I will be able to do in 2024.",{"type":415,"tag":434,"props":815,"children":817},{"id":816},"whats-next",[818],{"type":415,"tag":819,"props":820,"children":821},"strong",{},[822],{"type":420,"value":823},"What's next?",{"type":415,"tag":416,"props":825,"children":826},{},[827,829,836,838,845],{"type":420,"value":828},"Together with two friends, we have started a tech community called \"",{"type":415,"tag":423,"props":830,"children":833},{"href":831,"rel":832},"https://www.meetup.com/mtg-bordeaux/",[427],[834],{"type":420,"value":835},"MTG:Bordeaux",{"type":420,"value":837},",\" which will host meetups in Bordeaux to discuss Microsoft technologies (among others) several times a year. It is affiliated with ",{"type":415,"tag":423,"props":839,"children":842},{"href":840,"rel":841},"https://www.mtg-france.org/",[427],[843],{"type":420,"value":844},"MTG:France",{"type":420,"value":846},", which already encompasses numerous local communities in various French cities. The inaugural meetup is scheduled for February 1, 2024, and I hope it will be the first of many.",{"type":415,"tag":416,"props":848,"children":849},{},[850],{"type":420,"value":851},"Instead of setting vague plans for 2024 that I might not fully achieve, I prefer creating a list of small, tangible goals for the year. I know I won't be able to accomplish all of them, but it will provide me with achievable objectives to work on throughout the year:",{"type":415,"tag":454,"props":853,"children":854},{},[855,860,865,870,875,880,899,904,909,921,926],{"type":415,"tag":458,"props":856,"children":857},{},[858],{"type":420,"value":859},"Organize 3 meetups for MTG:Bordeaux",{"type":415,"tag":458,"props":861,"children":862},{},[863],{"type":420,"value":864},"Obtain the official Vue.js certification",{"type":415,"tag":458,"props":866,"children":867},{},[868],{"type":420,"value":869},"Create a small speaker website in Nuxt, listing my previous talks",{"type":415,"tag":458,"props":871,"children":872},{},[873],{"type":420,"value":874},"Build a small application using Dapr and running in Azure Container Apps",{"type":415,"tag":458,"props":876,"children":877},{},[878],{"type":420,"value":879},"Write a blog post about Obsidian",{"type":415,"tag":458,"props":881,"children":882},{},[883,885,892,894],{"type":420,"value":884},"Write 2 articles for the ",{"type":415,"tag":423,"props":886,"children":889},{"href":887,"rel":888},"https://bordeauxcoders.com/series/vuejs-cicd",[427],[890],{"type":420,"value":891},"Vue CI/CD series",{"type":420,"value":893}," on ",{"type":415,"tag":423,"props":895,"children":897},{"href":740,"rel":896},[427],[898],{"type":420,"value":744},{"type":415,"tag":458,"props":900,"children":901},{},[902],{"type":420,"value":903},"Present at least 2 different talks at developer conferences",{"type":415,"tag":458,"props":905,"children":906},{},[907],{"type":420,"value":908},"Reach 1K followers on LinkedIn",{"type":415,"tag":458,"props":910,"children":911},{},[912,914],{"type":420,"value":913},"Add missing sections to the ",{"type":415,"tag":423,"props":915,"children":918},{"href":916,"rel":917},"https://github.com/TechWatching/pulumi-azure-workshop",[427],[919],{"type":420,"value":920},"Pulumi Azure Workshop",{"type":415,"tag":458,"props":922,"children":923},{},[924],{"type":420,"value":925},"Develop a 1-day Pulumi training course",{"type":415,"tag":458,"props":927,"children":928},{},[929],{"type":420,"value":930},"Create a YouTube video about a developer tool or technology",{"type":415,"tag":434,"props":932,"children":934},{"id":933},"to-conclude",[935],{"type":420,"value":936},"To conclude",{"type":415,"tag":416,"props":938,"children":939},{},[940],{"type":420,"value":941},"Despite not fully achieving my goals, 2023 was an interesting year, especially regarding public speaking. Looking ahead to 2024, I have outlined a series of concrete goals that emphasize continuous learning and community involvement.",{"type":415,"tag":416,"props":943,"children":944},{},[945],{"type":420,"value":946},"As I close the 2023 chapter, I want to thank 3 people:",{"type":415,"tag":454,"props":948,"children":949},{},[950,955,960],{"type":415,"tag":458,"props":951,"children":952},{},[953],{"type":420,"value":954},"Christian Bonnaud - you played a role in many aspects I mentioned in this article (school relationships, blogging, tech community, ...), and it's always a pleasure to collaborate with you.",{"type":415,"tag":458,"props":956,"children":957},{},[958],{"type":420,"value":959},"Xavier Noya - it was nice to give a talk alongside you this year at BDX I/O",{"type":415,"tag":458,"props":961,"children":962},{},[963],{"type":420,"value":964},"My life partner - I wouldn't be able to write these articles, prepare these talks, or accomplish everything I do without your support and understanding",{"type":415,"tag":416,"props":966,"children":967},{},[968],{"type":420,"value":969},"Enjoy 2024, and keep learning.",{"title":401,"searchDepth":971,"depth":971,"links":972},2,[973,974,975,976,977,978],{"id":436,"depth":971,"text":439},{"id":533,"depth":971,"text":536},{"id":652,"depth":971,"text":655},{"id":772,"depth":971,"text":775},{"id":816,"depth":971,"text":823},{"id":933,"depth":971,"text":936},"markdown","content:1.posts:57.2023-retro.md","content","1.posts/57.2023-retro.md","md",{"_path":145,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":144,"description":985,"lead":986,"date":987,"image":988,"badge":989,"tags":990,"ImageAttribution":410,"body":991,"_type":979,"_id":1431,"_source":981,"_file":1432,"_extension":983},"I usually do not take the time to reflect on my developer journey and look back over the past year. Yet, it's a shame because I miss the opportunity to:","Challenges and achievements of 2022","2023-01-03T00:00:00.000Z",{"src":406},{"label":408},[360,254],{"type":412,"children":992,"toc":1421},[993,997,1020,1025,1031,1036,1041,1046,1051,1056,1061,1067,1072,1079,1100,1105,1114,1119,1133,1138,1143,1148,1161,1166,1190,1215,1225,1230,1235,1244,1258,1286,1300,1304,1309,1314,1328,1337,1342,1347,1370,1374,1379,1407],{"type":415,"tag":416,"props":994,"children":995},{},[996],{"type":420,"value":985},{"type":415,"tag":454,"props":998,"children":999},{},[1000,1005,1010,1015],{"type":415,"tag":458,"props":1001,"children":1002},{},[1003],{"type":420,"value":1004},"remind me of the challenges I faced",{"type":415,"tag":458,"props":1006,"children":1007},{},[1008],{"type":420,"value":1009},"remember what I have learned",{"type":415,"tag":458,"props":1011,"children":1012},{},[1013],{"type":420,"value":1014},"see what I have accomplished",{"type":415,"tag":458,"props":1016,"children":1017},{},[1018],{"type":420,"value":1019},"think about what I need to do next year to keep moving forward.",{"type":415,"tag":416,"props":1021,"children":1022},{},[1023],{"type":420,"value":1024},"So let's start this 2022 retrospective.",{"type":415,"tag":434,"props":1026,"children":1028},{"id":1027},"coming-back-to-front-end-development",[1029],{"type":420,"value":1030},"Coming \"back\" to front-end development",{"type":415,"tag":416,"props":1032,"children":1033},{},[1034],{"type":420,"value":1035},"During my career, I have mostly done back-end development, especially in recent years when I have been working on cloud projects. I was not totally unfamiliar with front-end development, but I preferred back-end development: thinking about cloud-native architectures speaks to me more than trying to center a div (don't be offended, I'm just kidding).",{"type":415,"tag":416,"props":1037,"children":1038},{},[1039],{"type":420,"value":1040},"However, in October 2021 I joined a team working on a Vue.js web application (with an ASP.NET Core back-end) and have been working on it since. So I had to quickly learn Vue.js and upgrade my front-end skills (which were quite rusty) in 2022.",{"type":415,"tag":416,"props":1042,"children":1043},{},[1044],{"type":420,"value":1045},"As someone used to C# language, and .NET libraries/tooling it was quite challenging to re-learn everything on the front-end. Hopefully, whether it's front-end or back-end, it is still a matter of software development therefore there are many similarities and some knowledge I already had. Yet, I learned a lot from my colleagues who were less experienced but had better front-end skills than me. It's a good reminder that wherever you are in your career, you always have things to learn from others, seniors as well as juniors.",{"type":415,"tag":416,"props":1047,"children":1048},{},[1049],{"type":420,"value":1050},"And you know what? I loved learning Vue.js and I am now a big fan of this framework. I was quite amazed to see it's community driven and that despite its huge popularity there is no big company behind it (like Facebook for React or Google for Angular), but many people and companies sponsoring the framework contributors. I love the ecosystem around Vue.js and I am happy that there is such a great community (lots of contributors live in France by the way).",{"type":415,"tag":416,"props":1052,"children":1053},{},[1054],{"type":420,"value":1055},"Even if I am far from being a Vue.js expert, I am proud to have brought some improvement ideas to the project I am working on (migrate to the composition API, migrate to Vite, add useful libraries like VueUse, ...). I am still not a CSS guru (and I guess I will never be) and I still prefer back-end development over front-end development. However, it's great to have a good understanding of both and be able to do both.",{"type":415,"tag":416,"props":1057,"children":1058},{},[1059],{"type":420,"value":1060},"In my personal time, I took a look at the Nuxt framework (which is a meta-framework built on top of Vue.js) and the developer experience seems awesome. It's a framework I want to explore in 2023.",{"type":415,"tag":434,"props":1062,"children":1064},{"id":1063},"a-step-into-the-world-of-content-creation",[1065],{"type":420,"value":1066},"A step into the world of content creation",{"type":415,"tag":416,"props":1068,"children":1069},{},[1070],{"type":420,"value":1071},"As a developer, it's nice to learn new things but it's even better to share them, not only with colleagues but also with other developers that could benefit from them. That is why I wanted to share with a broader audience what I had discovered at work or during my technology watch.",{"type":415,"tag":1073,"props":1074,"children":1076},"h3",{"id":1075},"social-media",[1077],{"type":420,"value":1078},"Social media",{"type":415,"tag":416,"props":1080,"children":1081},{},[1082,1084,1091,1092,1099],{"type":420,"value":1083},"I already used blog articles to share my learnings but it takes me a lot of time to write an article and it's often on a specific topic. Sometimes I just want to share one little tip I learned or one article I found worth reading. So in 2022, I started sharing links, tips, and other things on social networks. I did that mostly on LinkedIn and Twitter, yet I recently spent some time on other platforms like ",{"type":415,"tag":423,"props":1085,"children":1088},{"href":1086,"rel":1087},"https://mas.to/@techwatching",[427],[1089],{"type":420,"value":1090},"Mastodon",{"type":420,"value":706},{"type":415,"tag":423,"props":1093,"children":1096},{"href":1094,"rel":1095},"https://www.showwcase.com/techwatching",[427],[1097],{"type":420,"value":1098},"Showwcase",{"type":420,"value":723},{"type":415,"tag":416,"props":1101,"children":1102},{},[1103],{"type":420,"value":1104},"Here are what my posts look like:",{"type":415,"tag":416,"props":1106,"children":1107},{},[1108],{"type":415,"tag":587,"props":1109,"children":1113},{"alt":1110,"className":1111,"src":1112},"Posts on Twitter about tips.",[591,592],"/posts/images/2022_retro_1.png",[],{"type":415,"tag":416,"props":1115,"children":1116},{},[1117],{"type":420,"value":1118},"To be honest it did not bring me a lot of followers on Twitter or LinkedIn. Especially when you see that some people succeed in building in 6 months a bigger audience that I would ever have 😃. Is it bad? Not really, I would be glad if I could have more followers so that it could bring more readers to my blog but it's not very important. However, I made some nice connections and I am happy to share my learning journey with the few people that are interested.",{"type":415,"tag":416,"props":1120,"children":1121},{},[1122,1124,1131],{"type":420,"value":1123},"In addition to that, I learned a lot about content creation (for example how to schedule and publish the same content on multiple social media with tools like ",{"type":415,"tag":423,"props":1125,"children":1128},{"href":1126,"rel":1127},"https://www.feedhive.com/",[427],[1129],{"type":420,"value":1130},"FeedHive",{"type":420,"value":1132},"). Will it be useful in my current role? I don't think so. Will it help me in a future role or job? I don't know, it might be. Anyway, it's always fun to learn new things.",{"type":415,"tag":416,"props":1134,"children":1135},{},[1136],{"type":420,"value":1137},"I should probably tweet/toot/write more frequently in 2023, but it takes time so we will see.",{"type":415,"tag":1073,"props":1139,"children":1141},{"id":1140},"blog",[1142],{"type":420,"value":5},{"type":415,"tag":416,"props":1144,"children":1145},{},[1146],{"type":420,"value":1147},"Writing on social media did not prevent me from writing on my blog. I wrote 15 articles in 2022, it's less than in 2021 (19 articles) but it's fine: I am happy with the articles I wrote. I am also happy to see that my blog's traffic grew:",{"type":415,"tag":454,"props":1149,"children":1150},{},[1151,1156],{"type":415,"tag":458,"props":1152,"children":1153},{},[1154],{"type":420,"value":1155},"28K users vs 12K",{"type":415,"tag":458,"props":1157,"children":1158},{},[1159],{"type":420,"value":1160},"37K pages seen vs 18K",{"type":415,"tag":416,"props":1162,"children":1163},{},[1164],{"type":420,"value":1165},"Here are the most read articles on my blog in 2022 (without taking into account other websites on which I cross-post them):",{"type":415,"tag":454,"props":1167,"children":1168},{},[1169,1174,1178,1182,1186],{"type":415,"tag":458,"props":1170,"children":1171},{},[1172],{"type":420,"value":1173},"AzureWebJobsStorage, the secret you don't need in your Function App",{"type":415,"tag":458,"props":1175,"children":1176},{},[1177],{"type":420,"value":66},{"type":415,"tag":458,"props":1179,"children":1180},{},[1181],{"type":420,"value":114},{"type":415,"tag":458,"props":1183,"children":1184},{},[1185],{"type":420,"value":72},{"type":415,"tag":458,"props":1187,"children":1188},{},[1189],{"type":420,"value":21},{"type":415,"tag":416,"props":1191,"children":1192},{},[1193,1195,1200,1202,1207,1208,1214],{"type":420,"value":1194},"In 2022, I started submitting some of my articles on ",{"type":415,"tag":423,"props":1196,"children":1198},{"href":709,"rel":1197},[427],[1199],{"type":420,"value":721},{"type":420,"value":1201}," and continued cross-posting all my articles on ",{"type":415,"tag":423,"props":1203,"children":1205},{"href":700,"rel":1204},[427],[1206],{"type":420,"value":704},{"type":420,"value":706},{"type":415,"tag":423,"props":1209,"children":1212},{"href":1210,"rel":1211},"https://dev.to/techwatching",[427],[1213],{"type":420,"value":713},{"type":420,"value":723},{"type":415,"tag":416,"props":1216,"children":1217},{},[1218],{"type":415,"tag":587,"props":1219,"children":1224},{"alt":1220,"className":1221,"src":1222,"width":1223},"List of articles published on DZone by Alexandre Nédélec.",[591,592],"/posts/images/2022_retro_2.png",1000,[],{"type":415,"tag":416,"props":1226,"children":1227},{},[1228],{"type":420,"value":1229},"Views are great, nevertheless, what pleased me the most was seeing a few nice comments on my articles.  When you know your articles helped someone or taught something to someone, it's the best achievement.",{"type":415,"tag":416,"props":1231,"children":1232},{},[1233],{"type":420,"value":1234},"The topics I talked the most about in my articles this year were .NET, Azure, tooling, and Pulumi. I am a big fan of Pulumi, I found the technology great (even more after having used Terraform) so writing about it was nice. Thanks to these articles I have been invited to join the Puluminaries program (which recognizes members of the Pulumi community). It's amazing to see that blogging can lead to nice opportunities like that.",{"type":415,"tag":416,"props":1236,"children":1237},{},[1238],{"type":415,"tag":587,"props":1239,"children":1243},{"alt":1240,"className":1241,"src":1242},"Puluminaries page on the Pulumi website.",[591,592],"/posts/images/2022_retro_3.png",[],{"type":415,"tag":416,"props":1245,"children":1246},{},[1247,1249,1256],{"type":420,"value":1248},"Blogging can also be rewarding when you participate in writeathons like the ones Hashnode organizes regularly. I am particularly  glad to have participated in the ",{"type":415,"tag":423,"props":1250,"children":1253},{"href":1251,"rel":1252},"https://townhall.hashnode.com/4articles4weeks-writeathon-the-winners",[427],[1254],{"type":420,"value":1255},"\"4 articles 4 weeks\" writeathon",{"type":420,"value":1257}," and to have been part of the 5 top winners. It was the opportunity to:",{"type":415,"tag":454,"props":1259,"children":1260},{},[1261,1266,1271,1276,1281],{"type":415,"tag":458,"props":1262,"children":1263},{},[1264],{"type":420,"value":1265},"write about non-technical topics",{"type":415,"tag":458,"props":1267,"children":1268},{},[1269],{"type":420,"value":1270},"gain new followers",{"type":415,"tag":458,"props":1272,"children":1273},{},[1274],{"type":420,"value":1275},"have a post featured on Hashnode for the 1st time",{"type":415,"tag":458,"props":1277,"children":1278},{},[1279],{"type":420,"value":1280},"challenge me and publish 4 articles in 4 weeks",{"type":415,"tag":458,"props":1282,"children":1283},{},[1284],{"type":420,"value":1285},"discover other blogs",{"type":415,"tag":416,"props":1287,"children":1288},{},[1289,1291,1298],{"type":420,"value":1290},"In 2023, I plan to keep writing articles on my blog. I have a lot of ideas for articles, yet as a full-time developer and a dad of a 2 years old girl, it is often complicated to find time to write them. The problem is that creating an article (even on a topic I know) always involves a bit of search, and some effort to create the code samples. Furthermore, I am slow at writing. I hope to get better and faster at it. I think improving my use of PKM tools like ",{"type":415,"tag":423,"props":1292,"children":1295},{"href":1293,"rel":1294},"https://obsidian.md/",[427],[1296],{"type":420,"value":1297},"Obsidian",{"type":420,"value":1299}," could help me with that.",{"type":415,"tag":1073,"props":1301,"children":1302},{"id":533},[1303],{"type":420,"value":536},{"type":415,"tag":416,"props":1305,"children":1306},{},[1307],{"type":420,"value":1308},"Another way of sharing what you learn is public speaking.",{"type":415,"tag":416,"props":1310,"children":1311},{},[1312],{"type":420,"value":1313},"In the past, I gave a few internal talks in my company (about C#, CI/CD, and IaC) and even gave a talk with a colleague about Azure IoT at a small conference organized by my company. However, participating in events organized by your company and mostly internal is not the same as speaking at a developer conference or another public event. That's why I am pleased to have succeeded in 2022 to give my first talk at a developer conference.",{"type":415,"tag":416,"props":1315,"children":1316},{},[1317,1319,1326],{"type":420,"value":1318},"I was a speaker at Cloud Ouest, which took place online in June 2022. I did a talk called \"Infrastructure as Code or Infrastructure as Software\". You can find the replay on ",{"type":415,"tag":423,"props":1320,"children":1323},{"href":1321,"rel":1322},"https://youtu.be/V_Fis-hxQk4",[427],[1324],{"type":420,"value":1325},"YouTube",{"type":420,"value":1327}," (just so you know it's in French 😉).",{"type":415,"tag":416,"props":1329,"children":1330},{},[1331],{"type":415,"tag":587,"props":1332,"children":1336},{"alt":1333,"className":1334,"src":1335},"Cover of the Cloud Ouest talk about Infrastructure as Code. ",[591,592],"/posts/images/2022_retro_4.png",[],{"type":415,"tag":416,"props":1338,"children":1339},{},[1340],{"type":420,"value":1341},"I wish I could have given the same talk at other developer conferences (and especially in-person ones). Unfortunately, my proposals at different Call For Papers were not accepted. To be honest I found it challenging to become a speaker at a developer conference. First, you have to find a topic and prepare your talk without knowing if will ever be selected. Then you have to submit it to different CFPs hoping it will catch the attention of the selection committee which already receives lots of proposals, including some from well-known speakers. All that requires a bit of work and maybe for nothing.",{"type":415,"tag":416,"props":1343,"children":1344},{},[1345],{"type":420,"value":1346},"Nevertheless, speaking at a developer conference is still a goal for 2023. Public speaking is something I want to do, something I want to be better at it, and the opportunity to meet nice people at events and chat with fellow developers. So I will keep submitting proposals to CFPs and see what will happen. I have a few topics in mind around .NET and Azure (which are my 2 fields of predilection) thus I should create new talk proposals. What bothers me a little is that there seem to be few conferences in France dedicated to .NET or Azure in France, but maybe I am not looking properly.",{"type":415,"tag":416,"props":1348,"children":1349},{},[1350,1352,1359,1361,1368],{"type":420,"value":1351},"I almost forgot to mention than in 2022 I participated in a live debate \"Pulumi vs Terraform\" organized by Microsoft Tech Group France. It was recorded so you can find it ",{"type":415,"tag":423,"props":1353,"children":1356},{"href":1354,"rel":1355},"https://youtu.be/7raXBE5XH7Y",[427],[1357],{"type":420,"value":1358},"here",{"type":420,"value":1360}," (again it's in French). It was the first time I was doing a live on YouTube like that and this is not an easy exercise. Because it was a debate, you have to be ready to improvise to counter-argue. It's very different from a talk where you know exactly what you are going to say and when. But it was fun and I am grateful to ",{"type":415,"tag":423,"props":1362,"children":1365},{"href":1363,"rel":1364},"https://www.youtube.com/@MTGFrance_org",[427],[1366],{"type":420,"value":1367},"Microsoft Tech Group",{"type":420,"value":1369}," for giving me the opportunity to participate in this debate.",{"type":415,"tag":434,"props":1371,"children":1372},{"id":816},[1373],{"type":420,"value":823},{"type":415,"tag":416,"props":1375,"children":1376},{},[1377],{"type":420,"value":1378},"I have already mentioned most of the things I want to do as a developer in 2023 but not all of them. So let's recap what are my plans for 2023 as a developer:",{"type":415,"tag":454,"props":1380,"children":1381},{},[1382,1386,1391,1395,1399,1403],{"type":415,"tag":458,"props":1383,"children":1384},{},[1385],{"type":420,"value":462},{"type":415,"tag":458,"props":1387,"children":1388},{},[1389],{"type":420,"value":1390},"explore Azure Container Apps and Dapr (I have already had a glimpse in 2022 but I want to know more)",{"type":415,"tag":458,"props":1392,"children":1393},{},[1394],{"type":420,"value":472},{"type":415,"tag":458,"props":1396,"children":1397},{},[1398],{"type":420,"value":477},{"type":415,"tag":458,"props":1400,"children":1401},{},[1402],{"type":420,"value":482},{"type":415,"tag":458,"props":1404,"children":1405},{},[1406],{"type":420,"value":487},{"type":415,"tag":416,"props":1408,"children":1409},{},[1410,1412,1419],{"type":420,"value":1411},"But above all, I want 2023 to be a year of learning and sharing as well. As I have said in ",{"type":415,"tag":423,"props":1413,"children":1416},{"href":1414,"rel":1415},"https://www.techwatching.dev/posts/technology-watch-part3#sharing-is-learning",[427],[1417],{"type":420,"value":1418},"one of my articles",{"type":420,"value":1420}," sharing is learning because when you share something you are consolidating your knowledge and continuing your learning journey. So enjoy 2023 and keep learning.",{"title":401,"searchDepth":971,"depth":971,"links":1422},[1423,1424,1430],{"id":1027,"depth":971,"text":1030},{"id":1063,"depth":971,"text":1066,"children":1425},[1426,1428,1429],{"id":1075,"depth":1427,"text":1078},3,{"id":1140,"depth":1427,"text":5},{"id":533,"depth":1427,"text":536},{"id":816,"depth":971,"text":823},"content:1.posts:46.2022-retro.md","1.posts/46.2022-retro.md",{"_path":136,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":135,"description":1434,"lead":1435,"date":1436,"image":1437,"badge":1439,"tags":1441,"body":1442,"_type":979,"_id":2093,"_source":981,"_file":2094,"_extension":983},"This article is a discussion about API clients. Without being a comparison between the best API clients, this article talks about the pros and cons of some popular tools to send HTTP requests to an API. The goal is not to elect the best one, but rather to try to answer the following question: what we should consider when choosing an API client, and what are the challenges when using one?","What should you consider when choosing an API client?","2022-09-08T00:00:00.000Z",{"src":1438},"/images/tools_1.jpg",{"label":1440},"Tooling",[206,213,360,210],{"type":412,"children":1443,"toc":2075},[1444,1448,1454,1468,1540,1568,1573,1579,1584,1593,1599,1604,1609,1618,1623,1641,1646,1652,1657,1670,1676,1681,1686,1708,1717,1737,1781,1787,1792,1801,1807,1829,1834,1840,1845,1850,1859,1865,1870,1875,1893,1902,1914,1919,1925,1931,1936,1941,1946,1951,1956,1962,1975,1980,1993,2021,2035,2047,2064,2070],{"type":415,"tag":416,"props":1445,"children":1446},{},[1447],{"type":420,"value":1434},{"type":415,"tag":434,"props":1449,"children":1451},{"id":1450},"some-context",[1452],{"type":420,"value":1453},"Some context",{"type":415,"tag":416,"props":1455,"children":1456},{},[1457,1459,1466],{"type":420,"value":1458},"I like discussing tooling because as a developer choosing the right tool is often what makes me more productive in my job. I am talking about the \"right tool\" because I am not necessarily looking for the best one but the most appropriate one for my needs in a given context. The topic of API clients is not new to me, indeed the first post I wrote on this blog in March 2019 (and my most-read article on DEV.to where I re-posted it) was about using the vscode extension \"REST Client\" instead of Postman. ",{"type":415,"tag":423,"props":1460,"children":1463},{"href":1461,"rel":1462},"https://www.techwatching.dev/posts/testing-your-api-with-rest-client",[427],[1464],{"type":420,"value":1465},"This article",{"type":420,"value":1467}," is still relevant and in fact, I have been using REST Client as my main API client for a few years on different projects and in different teams.",{"type":415,"tag":416,"props":1469,"children":1470},{},[1471,1473,1480,1482,1489,1490,1497,1498,1505,1506,1513,1514,1521,1522,1529,1531,1538],{"type":420,"value":1472},"Yet I am not writing now to convince you to use \"REST Client\" or any other tool. Besides, you probably already have a favorite tool you are using to send HTTP requests. Indeed, there are many options: ",{"type":415,"tag":423,"props":1474,"children":1477},{"href":1475,"rel":1476},"https://www.postman.com",[427],[1478],{"type":420,"value":1479},"Postman",{"type":420,"value":1481},", ",{"type":415,"tag":423,"props":1483,"children":1486},{"href":1484,"rel":1485},"https://marketplace.visualstudio.com/items?itemName=humao.rest-client",[427],[1487],{"type":420,"value":1488},"REST Client",{"type":420,"value":1481},{"type":415,"tag":423,"props":1491,"children":1494},{"href":1492,"rel":1493},"https://www.thunderclient.com/",[427],[1495],{"type":420,"value":1496},"Thunder Client",{"type":420,"value":1481},{"type":415,"tag":423,"props":1499,"children":1502},{"href":1500,"rel":1501},"https://nightingale.rest/",[427],[1503],{"type":420,"value":1504},"Nightingale",{"type":420,"value":1481},{"type":415,"tag":423,"props":1507,"children":1510},{"href":1508,"rel":1509},"https://insomnia.rest/",[427],[1511],{"type":420,"value":1512},"Insomnia",{"type":420,"value":1481},{"type":415,"tag":423,"props":1515,"children":1518},{"href":1516,"rel":1517},"https://rapidapi.com/products/api-design/",[427],[1519],{"type":420,"value":1520},"RapidAPI Client",{"type":420,"value":1481},{"type":415,"tag":423,"props":1523,"children":1526},{"href":1524,"rel":1525},"https://hoppscotch.io/fr/",[427],[1527],{"type":420,"value":1528},"Hoppscotch",{"type":420,"value":1530},", and ",{"type":415,"tag":423,"props":1532,"children":1535},{"href":1533,"rel":1534},"https://httpie.io/",[427],[1536],{"type":420,"value":1537},"HTTPie",{"type":420,"value":1539}," just to name a few. There are many reasons why people choose one tool over another:",{"type":415,"tag":454,"props":1541,"children":1542},{},[1543,1548,1553,1558,1563],{"type":415,"tag":458,"props":1544,"children":1545},{},[1546],{"type":420,"value":1547},"it has more features than others",{"type":415,"tag":458,"props":1549,"children":1550},{},[1551],{"type":420,"value":1552},"some colleagues suggested it",{"type":415,"tag":458,"props":1554,"children":1555},{},[1556],{"type":420,"value":1557},"it's the latest tool featured on ProductHunt",{"type":415,"tag":458,"props":1559,"children":1560},{},[1561],{"type":420,"value":1562},"everyone in the company uses this API client",{"type":415,"tag":458,"props":1564,"children":1565},{},[1566],{"type":420,"value":1567},"it would be time-consuming to learn how to use another API Client",{"type":415,"tag":416,"props":1569,"children":1570},{},[1571],{"type":420,"value":1572},"I don't think these are good enough reasons, so I will talk to you about what matters to me when using an API Client.",{"type":415,"tag":434,"props":1574,"children":1576},{"id":1575},"ease-of-use",[1577],{"type":420,"value":1578},"Ease of use",{"type":415,"tag":416,"props":1580,"children":1581},{},[1582],{"type":420,"value":1583},"When I am using an API client, it's to make requests to an API and get responses. It's often to test an API or to debug the API I am developing. Therefore what's important to me is to have a simple tool that makes it easy to write HTTP requests, and display the responses and that's it.",{"type":415,"tag":416,"props":1585,"children":1586},{},[1587],{"type":415,"tag":587,"props":1588,"children":1592},{"alt":1589,"className":1590,"src":1591},"A scrabble tile that says keep things simple.",[591,592],"/posts/images/httpclients_1.jpg",[],{"type":415,"tag":1073,"props":1594,"children":1596},{"id":1595},"all-conceivable-functionalities-vs-essentials-features",[1597],{"type":420,"value":1598},"All conceivable functionalities vs. essentials features",{"type":415,"tag":416,"props":1600,"children":1601},{},[1602],{"type":420,"value":1603},"A lot of tools try to compete with each other by providing more features or very advanced features. First, it's useless because you are not going to use most of them. Second, it's counterproductive because having too many features will make an API client more complicated to use.",{"type":415,"tag":416,"props":1605,"children":1606},{},[1607],{"type":420,"value":1608},"One good example is Postman which went from a simple tool that makes HTTP requests to a real white elephant. To be honest, I am quite impressed with all the features you can find in Postman: the company has done an amazing job to build a platform that helps you in each step of your API lifecycle (specifications, design, documentation, testing, monitoring, ...). However, the downside is that Postman became bigger, slower, and less easy to use. I have no doubt Postman brings a lot of value to many developers that are building their APIs, yet a lot of people (like me) don't need all these unnecessary features and would be better with a simpler tool. Postman is just an example, there are many other API clients that overwhelm you with concepts you don't need (workspace, collections, mocks, flows), that require you to sign in and configure a bunch of things before being able to write an HTTP request.",{"type":415,"tag":416,"props":1610,"children":1611},{},[1612],{"type":415,"tag":587,"props":1613,"children":1617},{"alt":1614,"className":1615,"src":1616},"Logo of Postman.",[591,592],"/posts/images/httpclients_2.jpg",[],{"type":415,"tag":416,"props":1619,"children":1620},{},[1621],{"type":420,"value":1622},"So what are the essentials features an API Client should have besides sending requests to an API and displaying the response?",{"type":415,"tag":454,"props":1624,"children":1625},{},[1626,1631,1636],{"type":415,"tag":458,"props":1627,"children":1628},{},[1629],{"type":420,"value":1630},"First, it should support the \"protocol\" (REST, SOAP, GraphQL, gRPC) used by the API you want to query (pretty obvious but not all API clients support gRPC or GraphQL for instance).",{"type":415,"tag":458,"props":1632,"children":1633},{},[1634],{"type":420,"value":1635},"Second, it should support environment variables. You will need them to easily switch between environments: sending requests to an API in QA and to the same API in Production for instance. Variables can also be useful to store the result of a previous request and use it in another request.",{"type":415,"tag":458,"props":1637,"children":1638},{},[1639],{"type":420,"value":1640},"Third, it should allow version control of your request (we will come back to this later).",{"type":415,"tag":416,"props":1642,"children":1643},{},[1644],{"type":420,"value":1645},"I think that's all you need. In my opinion, testing and integration with CI/CD pipelines (to automate testing) are nice-to-have functionalities but not mandatory. Indeed, if you want to do some complex tests with big scenarios that run in parallel, you are probably not using an API Client for that and rather develop proper integration tests using more appropriate tools.",{"type":415,"tag":1073,"props":1647,"children":1649},{"id":1648},"integrated-tools-vs-standalone-tools",[1650],{"type":420,"value":1651},"Integrated tools vs. standalone tools",{"type":415,"tag":416,"props":1653,"children":1654},{},[1655],{"type":420,"value":1656},"Some API Clients are standalone software, whether rich clients (like Postman, or Nightingale) or web applications (like Hoppscotch). Some are directly integrated with your developer tools and IDEs. I feel more productive when everything is in one place and I leave my IDE as little as possible, so that's why I prefer an API Client integrated with my IDE. I find it easier to use a familiar UI in a tool I already know and like rather than using a completely different tool. Everyone has his own way of working so you may prefer a standalone tool and that's fine as well. Just take the time to think about what's best for you.",{"type":415,"tag":416,"props":1658,"children":1659},{},[1660,1662,1668],{"type":420,"value":1661},"If you are fond of vscode, you have different API clients available as extensions, for instance: REST Client, Thunder Client, and RapidAPI Client for VS Code. If your everyday IDE is Visual Studio, there is an extension ",{"type":415,"tag":423,"props":1663,"children":1666},{"href":1664,"rel":1665},"https://marketplace.visualstudio.com/items?itemName=MadsKristensen.RestClient",[427],[1667],{"type":420,"value":1488},{"type":420,"value":1669}," based on the REST Client for vscode. If you only swear by IntelliJ IDEA or Rider, all JetBrains IDEs have a built-in HTTP Client.",{"type":415,"tag":1073,"props":1671,"children":1673},{"id":1672},"gui-tools-vs-text-based-tools",[1674],{"type":420,"value":1675},"GUI tools vs. text-based tools",{"type":415,"tag":416,"props":1677,"children":1678},{},[1679],{"type":420,"value":1680},"There are 2 types of tools: GUI tools and text-based tools.",{"type":415,"tag":416,"props":1682,"children":1683},{},[1684],{"type":420,"value":1685},"Generally, GUI tools are easier to use than text-based tools because they offer a simple way to create and send an HTTP request. Of course, this is not always the case: I already talked about some API clients that have a complex UI because of their many features. Fortunately, other GUI tools have managed to keep a simple and clean user interface. That is precisely how Thunder Client has been designed: a lightweight API client with an easy-to-use UI; and it's a success. I particularly like the GUI-based tests of Thunder Client that allow you to quickly do basic tests on HTTP responses without scripting anything. Test scenarios will be quite limited, yet you probably don't want to use an API client for more complex scenarios. There are many other API clients with a great UI, take the time to test several, the choice will probably be a matter of personal preference.",{"type":415,"tag":416,"props":1687,"children":1688},{},[1689,1691,1697,1699,1706],{"type":420,"value":1690},"Then, why bother with a text-based tool instead? How could it be easier to manually write an HTTP request in a plain text file than using a GUI for that? Because when you use a text-based API client like ",{"type":415,"tag":1692,"props":1693,"children":1695},"code",{"className":1694},[],[1696],{"type":420,"value":1488},{"type":420,"value":1698}," you write your request following the standard ",{"type":415,"tag":423,"props":1700,"children":1703},{"href":1701,"rel":1702},"https://www.rfc-editor.org/rfc/rfc7230#section-3",[427],[1704],{"type":420,"value":1705},"RFC 2730",{"type":420,"value":1707},". It's a standard so you will find it everywhere to describe the requests, including in the documentation of most popular APIs. It's quite straightforward so you won't have a hard time writing the requests.",{"type":415,"tag":416,"props":1709,"children":1710},{},[1711],{"type":415,"tag":587,"props":1712,"children":1716},{"alt":1713,"className":1714,"src":1715},"REST Client in vscode.",[591,592],"/posts/images/httpclients_3.png",[],{"type":415,"tag":416,"props":1718,"children":1719},{},[1720,1722,1728,1730,1735],{"type":420,"value":1721},"Moreover, these kinds of API clients (which are often IDEs extensions or built-in in an IDE) will understand the HTTP text files (with ",{"type":415,"tag":1723,"props":1724,"children":1725},"em",{},[1726],{"type":420,"value":1727},".rest",{"type":420,"value":1729}," or ",{"type":415,"tag":1723,"props":1731,"children":1732},{},[1733],{"type":420,"value":1734},".http",{"type":420,"value":1736}," extension) and help you write the requests. You can write multiple requests in the same file and don't have to learn how to use a specific tool, just to write requests in plain text. Therefore, once you are used to the raw syntax of HTTP requests, using a text-based tool becomes even easier to use than the simplest GUI tool.",{"type":415,"tag":624,"props":1738,"children":1740},{"icon":1739},"i-heroicons-light-bulb",[1741,1746],{"type":415,"tag":416,"props":1742,"children":1743},{},[1744],{"type":420,"value":1745},"I already mentioned them before but examples of such text-based tools are:",{"type":415,"tag":454,"props":1747,"children":1748},{},[1749,1759,1769],{"type":415,"tag":458,"props":1750,"children":1751},{},[1752,1757],{"type":415,"tag":423,"props":1753,"children":1755},{"href":1484,"rel":1754},[427],[1756],{"type":420,"value":1488},{"type":420,"value":1758}," in vscode",{"type":415,"tag":458,"props":1760,"children":1761},{},[1762,1767],{"type":415,"tag":423,"props":1763,"children":1765},{"href":1664,"rel":1764},[427],[1766],{"type":420,"value":1488},{"type":420,"value":1768}," in Visual Studio",{"type":415,"tag":458,"props":1770,"children":1771},{},[1772,1779],{"type":415,"tag":423,"props":1773,"children":1776},{"href":1774,"rel":1775},"https://www.jetbrains.com/help/rider/Http_client_in__product__code_editor.html",[427],[1777],{"type":420,"value":1778},"HTTP Client",{"type":420,"value":1780}," in Rider or any other JetBrains IDE",{"type":415,"tag":434,"props":1782,"children":1784},{"id":1783},"collaboration",[1785],{"type":420,"value":1786},"Collaboration",{"type":415,"tag":416,"props":1788,"children":1789},{},[1790],{"type":420,"value":1791},"The reason why most API clients are a no go for me is that they don't facilitate collaboration. Collaboration is an important part of my job so I need an API client that makes it easy to share requests with others.",{"type":415,"tag":416,"props":1793,"children":1794},{},[1795],{"type":415,"tag":587,"props":1796,"children":1800},{"alt":1797,"className":1798,"src":1799},"A scrabble board with words spelling teamwork.",[591,592],"/posts/images/httpclients_4.jpg",[],{"type":415,"tag":1073,"props":1802,"children":1804},{"id":1803},"are-you-ready-to-pay-the-price-for-team-collaboration",[1805],{"type":420,"value":1806},"Are you ready to pay the price for team collaboration?",{"type":415,"tag":416,"props":1808,"children":1809},{},[1810,1812,1818,1820,1827],{"type":420,"value":1811},"Although a few API clients totally lack collaboration features, many of them have nice features to collaborate with your team. However, that is also how the companies behind these tools make money: charging for collaboration features. Usually working with an API client is free for individuals but you have to pay when you are a company or a team. You can see for instance the pricing page of ",{"type":415,"tag":423,"props":1813,"children":1816},{"href":1814,"rel":1815},"https://www.postman.com/pricing/",[427],[1817],{"type":420,"value":1479},{"type":420,"value":1819}," or the one from ",{"type":415,"tag":423,"props":1821,"children":1824},{"href":1822,"rel":1823},"https://rapidapi.com/products/api-design",[427],[1825],{"type":420,"value":1826},"RapidAPI",{"type":420,"value":1828},". I have nothing against that: these companies put a lot of work and money into making these great tools, they need to be profitable and make money. Yet the question is: are you (or is your company) willing to pay for an API client?",{"type":415,"tag":416,"props":1830,"children":1831},{},[1832],{"type":420,"value":1833},"If the answer is yes, then fine, choose the best tool for your team, buy some licenses and enjoy. If the answer is no, then how do you intend to work with your colleagues without these collaboration features? Let me guess, you have found a way to export your collection of requests to a file. So each time a new colleague joins your team, you send him/her the file by mail; no one has the same version of the file but you don't care. Or maybe you have put it in a shared drive so everyone can edit the requests; you just have to hope that 2 people don't edit it at the same time. Why not put the file on a flash drive and pass it on to each other while you're at it? I think you understood what I was getting at: if you work with a team, pay for collaboration features, or choose a free API client suitable for teamwork.",{"type":415,"tag":1073,"props":1835,"children":1837},{"id":1836},"version-control-is-the-key",[1838],{"type":420,"value":1839},"Version control is the key",{"type":415,"tag":416,"props":1841,"children":1842},{},[1843],{"type":420,"value":1844},"In my daily work as a developer, I work in a team and I want to share requests with them, allow them to edit them, and see the history of changes made. It's funny because it's the same kind of thing you want for your application code when developing. And what helps you with that? Version control. So if you use a git repository to version your application code, there is no reason why it would not be a good fit for your collection of HTTP requests.",{"type":415,"tag":416,"props":1846,"children":1847},{},[1848],{"type":420,"value":1849},"Besides, that is exactly what some API clients like Thunder Client or Postman offer: integration with external git repositories. Please note that is not necessary for your API client to have a git integration to share your requests through git, as long as your requests are available in a text file you can version it's fine. So why bother with an obscure \"cloud synchronization\" of your requests when you can share them with your team through a git repository?",{"type":415,"tag":624,"props":1851,"children":1853},{"icon":1852},"i-heroicons-chat-bubble-left-20-solid",[1854],{"type":415,"tag":416,"props":1855,"children":1856},{},[1857],{"type":420,"value":1858},"The sweet spot when you are building an API is to store your API application code and your requests to call/test this API in the same git repository.",{"type":415,"tag":1073,"props":1860,"children":1862},{"id":1861},"how-requests-are-stored-is-important",[1863],{"type":420,"value":1864},"How requests are stored is important",{"type":415,"tag":416,"props":1866,"children":1867},{},[1868],{"type":420,"value":1869},"I previously mentioned how some tools like Thunder Client offer a git integration with external git repositories. Requests and environment variables used by Thunder Client are stored in JSON files that you can add to your git repository. In a similar way, with Postman you can export requests and environment variables in JSON files and version them. There is a big problem with this way of doing things: using JSON files to version HTTP requests is not convenient at all! I have no problem with the JSON format itself, as a developer, it's something I often use. However, HTTP requests stored in a JSON file are not easily readable by a human. If you version HTTP requests, it is not to struggle to understand the history of changes or to have a hard time resolving conflicts between changes made by you and other developers of the team.",{"type":415,"tag":416,"props":1871,"children":1872},{},[1873],{"type":420,"value":1874},"I have seen some QA people using Postman for integration testing that were exporting their Postman data (collection, environments, ...) and versioning it in a git repository. What started out as a good intention turned out to be a very bad idea:",{"type":415,"tag":454,"props":1876,"children":1877},{},[1878,1883,1888],{"type":415,"tag":458,"props":1879,"children":1880},{},[1881],{"type":420,"value":1882},"the exported collection was just a huge JSON file that contained all the requests and tests, so each change was made to this same file with the inconveniences I mentioned previously",{"type":415,"tag":458,"props":1884,"children":1885},{},[1886],{"type":420,"value":1887},"editing the JSON file directly and especially the tests written in javascript is a nightmare because with the Postman export the code is stored as string in the JSON (forget about using code quality tools 🥲)",{"type":415,"tag":458,"props":1889,"children":1890},{},[1891],{"type":420,"value":1892},"the environment files versioned were containing secrets so secrets were committed in clear text in the git repository 😱",{"type":415,"tag":416,"props":1894,"children":1895},{},[1896],{"type":415,"tag":587,"props":1897,"children":1901},{"alt":1898,"className":1899,"src":1900},"A silhouette of a man.",[591,592],"/posts/images/httpclients_5.jpg",[],{"type":415,"tag":416,"props":1903,"children":1904},{},[1905,1907,1912],{"type":420,"value":1906},"To avoid these caveats, I think the best way to store HTTP requests is to store them in HTTP text files following the standard ",{"type":415,"tag":423,"props":1908,"children":1910},{"href":1701,"rel":1909},[427],[1911],{"type":420,"value":1705},{"type":420,"value":1913},". I already talked about text-based tools that were following this approach, unfortunately, I did not find any GUI tool that was doing that (probably because GUI tools always have extra features with things that can't be easily stored in an HTTP file).",{"type":415,"tag":416,"props":1915,"children":1916},{},[1917],{"type":420,"value":1918},"If you pay for an API client with which your requests are synchronized in the cloud with your colleagues, you probably don't care how the requests are stored. However, I hope your API client knows how to handle merge and conflicts (1 or more requests edited by several colleagues at the same time for example). Even if it does, be aware it can be not that easy to manually resolve these conflicts in a GUI tool.",{"type":415,"tag":434,"props":1920,"children":1922},{"id":1921},"final-thoughts",[1923],{"type":420,"value":1924},"Final thoughts",{"type":415,"tag":1073,"props":1926,"children":1928},{"id":1927},"using-the-right-tool-for-a-given-context",[1929],{"type":420,"value":1930},"Using the right tool for a given context",{"type":415,"tag":416,"props":1932,"children":1933},{},[1934],{"type":420,"value":1935},"I think you understood that there was no perfect API client. So once again, the answer to choosing the right one will be \"it depends\".",{"type":415,"tag":416,"props":1937,"children":1938},{},[1939],{"type":420,"value":1940},"If for your project, you need to choose an API client that will only be used by developers of your team that are coding in vscode, maybe REST Client, Thunder Client, or RapidAPI Client for VS Code are interesting choices.",{"type":415,"tag":416,"props":1942,"children":1943},{},[1944],{"type":420,"value":1945},"For a lot of reasons I explained previously I am not a big fan of big standalone tools like Postman. Yet, Postman is installed on my laptop, and if people send me their requests collection to test their API, I would be crazy not to take advantage of it and rewrite every request just because I prefer to use other tools.",{"type":415,"tag":416,"props":1947,"children":1948},{},[1949],{"type":420,"value":1950},"I like the HTTP request format and I think people using API clients should be familiar with it. Unfortunately, sometimes people that need to use an API client don't have a technical background. In that case, maybe GUI tools with a simple interface are better suited than a text-based tool. Thunder Client with its scriptless testing feature might be a good option (although it requires you to install vscode which is more intended for developers).",{"type":415,"tag":416,"props":1952,"children":1953},{},[1954],{"type":420,"value":1955},"There are many API clients that you can use. Without knowing all of them, it can be a good idea to know what are the alternatives to the most famous ones, in order to choose the right one for your current context.",{"type":415,"tag":1073,"props":1957,"children":1959},{"id":1958},"what-am-i-currently-using",[1960],{"type":420,"value":1961},"What am I currently using?",{"type":415,"tag":416,"props":1963,"children":1964},{},[1965,1967,1973],{"type":420,"value":1966},"As far as I'm concerned, I prefer using HTTP requests in HTTP files that I edit in a text editor or an IDE and that I commit to a git repository. That way, I have several HTTP files with HTTP requests grouped by concern. When I or one of my colleagues make a change to a request, the others just have to do a ",{"type":415,"tag":1692,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":420,"value":1972},"git pull",{"type":420,"value":1974}," to get the change. We use something standard and we are not directly dependent on a specific tool because HTTP files are supported by several tools.",{"type":415,"tag":416,"props":1976,"children":1977},{},[1978],{"type":420,"value":1979},"I have used REST Client for quite a while now, and I am happy with it: simple but works fine, no need to pay a subscription, it's just a vscode extension to install.",{"type":415,"tag":416,"props":1981,"children":1982},{},[1983,1985,1991],{"type":420,"value":1984},"However, as I have started recently to use more and more Rider, I am also using more and more its built-in HTTP Client which is awesome. If you are using Rider or one of the other JetBrains IDEs I recommend you to try the ",{"type":415,"tag":423,"props":1986,"children":1988},{"href":1774,"rel":1987},[427],[1989],{"type":420,"value":1990},"built-in HTTP Client",{"type":420,"value":1992}," because:",{"type":415,"tag":454,"props":1994,"children":1995},{},[1996,2001,2006,2011,2016],{"type":415,"tag":458,"props":1997,"children":1998},{},[1999],{"type":420,"value":2000},"you don't have to leave your favorite IDE to make HTTP requests to an API",{"type":415,"tag":458,"props":2002,"children":2003},{},[2004],{"type":420,"value":2005},"it supports HTTP requests, gRPC requests, WebSocket requests, GraphQL",{"type":415,"tag":458,"props":2007,"children":2008},{},[2009],{"type":420,"value":2010},"it has many features to help you write the requests like converting cURL requests to the HTTP request format",{"type":415,"tag":458,"props":2012,"children":2013},{},[2014],{"type":420,"value":2015},"it supports environment variables that can be stored in a public environment file (stored in the git repository) or private environment file (local file containing sensitive information that will not be committed to the repository)",{"type":415,"tag":458,"props":2017,"children":2018},{},[2019],{"type":420,"value":2020},"it allows you to write response handler scripts in JavaScript (directly in the HTTP files or in external js files), which opens the door to many possibilities like writing tests",{"type":415,"tag":416,"props":2022,"children":2023},{},[2024,2026,2033],{"type":420,"value":2025},"And the icing on the cake, as you see on the tweet below there is a ",{"type":415,"tag":423,"props":2027,"children":2030},{"href":2028,"rel":2029},"https://github.com/restcli/restcli",[427],[2031],{"type":420,"value":2032},"CLI",{"type":420,"value":2034}," to execute these HTTP files from the command line. It means that if you have written tests for your HTTP requests with the HTTP Client, you can execute them in your CI/CD pipeline. It also means that even without a JetBrains' IDE you can execute HTTP request files.",{"type":415,"tag":2036,"props":2037,"children":2041},"div",{"className":2038},[2039,2040],"flex","justify-center",[2042],{"type":415,"tag":2043,"props":2044,"children":2046},"tweet",{"id":2045},"1546831245274931201",[],{"type":415,"tag":624,"props":2048,"children":2049},{"icon":1739},[2050],{"type":415,"tag":416,"props":2051,"children":2052},{},[2053,2055,2062],{"type":420,"value":2054},"Even if you are using a private environment file to store secrets environments variables, it's often not very convenient to share it with your news colleagues. I wrote ",{"type":415,"tag":423,"props":2056,"children":2059},{"href":2057,"rel":2058},"https://www.techwatching.dev/posts/http-clients-secrets",[427],[2060],{"type":420,"value":2061},"an article",{"type":420,"value":2063}," on the topic that showed how you can store secrets in Azure Key Vault and script their retrieval and the generation of the secret environment file using Azure CLI.",{"type":415,"tag":1073,"props":2065,"children":2067},{"id":2066},"in-summary",[2068],{"type":420,"value":2069},"In summary",{"type":415,"tag":416,"props":2071,"children":2072},{},[2073],{"type":420,"value":2074},"I talked about a lot of things but in concrete terms what matters to me when using an API Client is ease of use and collaboration. You may not have exactly the same needs, yet I think these are 2 aspects you should pay attention to when choosing an API Client. As you have read in this article, each API client has its advantages and inconveniences so even if you favor simplicity and collaboration you won't find a perfect tool. So what should you choose? I don't have the answer to that, I think you should try different tools and find what is the most appropriate in your context. But you should definitely not take the first one that comes along just because others use it.",{"title":401,"searchDepth":971,"depth":971,"links":2076},[2077,2078,2083,2088],{"id":1450,"depth":971,"text":1453},{"id":1575,"depth":971,"text":1578,"children":2079},[2080,2081,2082],{"id":1595,"depth":1427,"text":1598},{"id":1648,"depth":1427,"text":1651},{"id":1672,"depth":1427,"text":1675},{"id":1783,"depth":971,"text":1786,"children":2084},[2085,2086,2087],{"id":1803,"depth":1427,"text":1806},{"id":1836,"depth":1427,"text":1839},{"id":1861,"depth":1427,"text":1864},{"id":1921,"depth":971,"text":1924,"children":2089},[2090,2091,2092],{"id":1927,"depth":1427,"text":1930},{"id":1958,"depth":1427,"text":1961},{"id":2066,"depth":1427,"text":2069},"content:1.posts:43.http-clients.md","1.posts/43.http-clients.md",{"_path":130,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":129,"description":2096,"lead":2097,"date":2098,"badge":2099,"image":2100,"tags":2102,"body":2103,"_type":979,"_id":2491,"_source":981,"_file":2492,"_extension":983},"Like I wrote in my last article, as a developer sometimes you get stuck on a problem for a few hours or a few days, your code won't work, and you think nobody can help you 😿. This can be very frustrating, but fortunately, there are plenty of ways to look for a solution or to seek help. You are probably already using some of them with success, yet there may be some you don't think of and that could help you a lot. That is the topic of this article.","Some tips to get unstuck as a developer","2022-08-27T00:00:00.000Z",{"label":408},{"src":2101},"/images/laptop_1.jpg",[360],{"type":412,"children":2104,"toc":2483},[2105,2119,2125,2130,2144,2157,2162,2171,2176,2181,2186,2192,2197,2202,2211,2225,2231,2253,2262,2274,2279,2288,2294,2316,2321,2389,2394,2410,2416,2421,2429,2434,2443,2448,2456,2460,2465,2478],{"type":415,"tag":416,"props":2106,"children":2107},{},[2108,2110,2117],{"type":420,"value":2109},"Like I wrote in my last ",{"type":415,"tag":423,"props":2111,"children":2114},{"href":2112,"rel":2113},"https://www.techwatching.dev/posts/be-a-developer",[427],[2115],{"type":420,"value":2116},"article",{"type":420,"value":2118},", as a developer sometimes you get stuck on a problem for a few hours or a few days, your code won't work, and you think nobody can help you 😿. This can be very frustrating, but fortunately, there are plenty of ways to look for a solution or to seek help. You are probably already using some of them with success, yet there may be some you don't think of and that could help you a lot. That is the topic of this article.",{"type":415,"tag":434,"props":2120,"children":2122},{"id":2121},"use-the-obvious-but-efficient-ways-to-overcome-your-programming-problem",[2123],{"type":420,"value":2124},"Use the obvious but efficient ways to overcome your programming problem",{"type":415,"tag":416,"props":2126,"children":2127},{},[2128],{"type":420,"value":2129},"There are many obvious ways to find a solution to a programming problem. And as you must be already familiar with them, I won't spend too much time talking to you about them.",{"type":415,"tag":416,"props":2131,"children":2132},{},[2133,2135,2142],{"type":420,"value":2134},"I guess every developer knows about \"",{"type":415,"tag":423,"props":2136,"children":2139},{"href":2137,"rel":2138},"https://en.wikipedia.org/wiki/Rubber_duck_debugging",[427],[2140],{"type":420,"value":2141},"rubber duck debugging",{"type":420,"value":2143},"\": sometimes just explaining your problem to someone or something 🦆 can help you understand what is not working correctly. I think there are two interesting ideas to draw from it:",{"type":415,"tag":454,"props":2145,"children":2146},{},[2147,2152],{"type":415,"tag":458,"props":2148,"children":2149},{},[2150],{"type":420,"value":2151},"it's important to clearly state what your problem is and what did you try to solve it 🔍",{"type":415,"tag":458,"props":2153,"children":2154},{},[2155],{"type":420,"value":2156},"sometimes you can find the solution to your problem just by looking at it from another perspective 🔭",{"type":415,"tag":416,"props":2158,"children":2159},{},[2160],{"type":420,"value":2161},"If you know how to quickly explain what your problem is about (and even better if you have written it down), what you tried, what worked, and what did not work, then it will be easy to ask for help from your colleagues. It will also help you if you need to ask your question on a Q&A website like StackOverflow. These are two common things people do to overcome their issues and they often work well.",{"type":415,"tag":416,"props":2163,"children":2164},{},[2165],{"type":415,"tag":587,"props":2166,"children":2170},{"alt":2167,"className":2168,"src":2169},"A person making a Google search on a laptop computer at a desk.",[591,592],"/posts/images/getunstuck_google.jpg",[],{"type":415,"tag":416,"props":2172,"children":2173},{},[2174],{"type":420,"value":2175},"Another obvious one is to use your favorite search engine (Google, Bing, DuckDuckGo, Qwant, ...) to find a solution. I often think that part of being a developer is to know how to efficiently use a search engine (if you are interested, there are many articles on the internet that give tips about how to better use a search engine) and how to quickly identify the search results that can help you.",{"type":415,"tag":416,"props":2177,"children":2178},{},[2179],{"type":420,"value":2180},"If you have been stuck for a lot of time, just take a break. Go for a walk 🚶🏽‍♀️, go cook something, go play sports, in short, do something else to let your brain rest. Sometimes your brain needs time to process information 🧠. Maybe you just need a good night's sleep before you tackle your problem again. You might even be surprised to find the solution while doing something else. For example, I know that some people (myself included) get a lot of new ideas or find solutions when they take a shower (of course, think of the planet 🌍 and do not take big showers just because I said that).",{"type":415,"tag":416,"props":2182,"children":2183},{},[2184],{"type":420,"value":2185},"Now let's talk about less obvious tips to get unstuck.",{"type":415,"tag":434,"props":2187,"children":2189},{"id":2188},"look-for-help-in-your-company",[2190],{"type":420,"value":2191},"Look for help in your company",{"type":415,"tag":416,"props":2193,"children":2194},{},[2195],{"type":420,"value":2196},"I have already talked about asking for help from your colleagues. Usually, that is the first thing we do. But we often only ask our close colleagues or the colleagues in our team. If you are working in a big company, many people that might help you even if you don't know them personally. So how to contact them?",{"type":415,"tag":416,"props":2198,"children":2199},{},[2200],{"type":420,"value":2201},"If your issue concerns a specific topic and there is a Subject Matter Expert for this topic in your company, maybe you can contact him directly by email or by chat. There might even be a community of people interested in this topic that discuss it on Microsoft Teams or Slack channels (or whatever messaging application your company is using): join the conversation to raise your point, people are often happy to share their knowledge on a topic they like.",{"type":415,"tag":416,"props":2203,"children":2204},{},[2205],{"type":415,"tag":587,"props":2206,"children":2210},{"alt":2207,"className":2208,"src":2209},"A scrabble tiles spelling ask for help on a white surface.",[591,592],"/posts/images/getunstuck_help.jpg",[],{"type":415,"tag":416,"props":2212,"children":2213},{},[2214,2216,2223],{"type":420,"value":2215},"I am sure there are many other ways to ask for help in your company that you know but don't think about using. For example, your company might have an enterprise social networking service like Yammer. In my current company, we have ",{"type":415,"tag":423,"props":2217,"children":2220},{"href":2218,"rel":2219},"https://stackoverflow.co/teams",[427],[2221],{"type":420,"value":2222},"Stack Overflow for Enterprise",{"type":420,"value":2224}," (it's like a private instance of Stack Overflow for a company) and it's great to discuss technical questions inside the company, even with colleagues from other countries. Don't hesitate to use your company communication tools to seek advice from experts, someone may be able to help you!",{"type":415,"tag":434,"props":2226,"children":2228},{"id":2227},"ask-questions-in-specialized-forums-and-qa-platforms",[2229],{"type":420,"value":2230},"Ask questions in specialized forums and Q&A platforms",{"type":415,"tag":416,"props":2232,"children":2233},{},[2234,2236,2243,2245,2252],{"type":420,"value":2235},"Yes, I know you already know and use StackOverflow (by the way, do not only search your solution in answers to existing questions, take the time to contribute too by asking questions and answering some). However, there are plenty of Q&A platforms, maybe less famous than StackOverflow but more specialized. For instance, if you are facing a problem with an Azure service you can use ",{"type":415,"tag":423,"props":2237,"children":2240},{"href":2238,"rel":2239},"https://docs.microsoft.com/en-us/answers/",[427],[2241],{"type":420,"value":2242},"Microsoft Q&A",{"type":420,"value":2244}," which is the official Microsoft site for technical questions on Microsoft products and services. People from the community will try to help you as well as people from Microsoft. If you have a question about Vue.js you can ask it on the ",{"type":415,"tag":423,"props":2246,"children":2249},{"href":2247,"rel":2248},"https://forum.vuejs.org/",[427],[2250],{"type":420,"value":2251},"Vue.js forum",{"type":420,"value":723},{"type":415,"tag":416,"props":2254,"children":2255},{},[2256],{"type":415,"tag":587,"props":2257,"children":2261},{"alt":2258,"className":2259,"src":2260},"Microsoft Q&A website.",[591,592],"/posts/images/getunstuck_microsoft_qna.png",[],{"type":415,"tag":416,"props":2263,"children":2264},{},[2265,2272],{"type":415,"tag":423,"props":2266,"children":2269},{"href":2267,"rel":2268},"https://www.reddit.com/",[427],[2270],{"type":420,"value":2271},"Reddit",{"type":420,"value":2273}," is another interesting platform. It's kind of a collection of forums/communities, where each forum/community is about a topic. It's popular among developers so there is a community for almost every developer topic/framework/stack you could be dealing with. Therefore you should find a community where to report your problem and some people might give you some answers or some leads to exploring. Please note that it's sometimes complicated to get visibility for your question because its visibility will depend on whether it is upvoted a lot or not.",{"type":415,"tag":416,"props":2275,"children":2276},{},[2277],{"type":420,"value":2278},"I almost forgot to talk about GitHub Discussions. GitHub Discussions is a collaborative communication forum you enable or not on a GitHub repository so it might not be present all the time. But when your problem is related to an open source project on GitHub that has GitHub discussions enabled, it's a great place to ask questions. The issues tab of a GitHub repository are another place you can ask questions but it might be less suitable to discuss your problem, it depends on the repository and what the maintainers of the project prefer.",{"type":415,"tag":416,"props":2280,"children":2281},{},[2282],{"type":415,"tag":587,"props":2283,"children":2287},{"alt":2284,"className":2285,"src":2286},"Pulumi discussions on GitHub.",[591,592],"/posts/images/getunstuck_pulumi.png",[],{"type":415,"tag":434,"props":2289,"children":2291},{"id":2290},"talk-to-community-members-where-they-met",[2292],{"type":420,"value":2293},"Talk to community members where they met",{"type":415,"tag":416,"props":2295,"children":2296},{},[2297,2299,2306,2307,2314],{"type":420,"value":2298},"When you are stuck with a programming problem it's often related to the software (framework, library, tool, ...) your code is using. Therefore the people best able to help you are the maintainers or other users of this software. And whether or not they are part of a company or an open source community, they often use communication tools like ",{"type":415,"tag":423,"props":2300,"children":2303},{"href":2301,"rel":2302},"https://slack.com/",[427],[2304],{"type":420,"value":2305},"Slack",{"type":420,"value":1729},{"type":415,"tag":423,"props":2308,"children":2311},{"href":2309,"rel":2310},"https://discord.com/",[427],[2312],{"type":420,"value":2313},"Discord",{"type":420,"value":2315}," to talk. So, a good idea 💡 would be to join the corresponding Slack workspace or Discord server (generally they are open to everyone to join) and talk to these people through the appropriate discussions/channels. Most of the time, channels/discussions are categorized by topic and there are sometimes some dedicated to people looking for help. Each community has its rules and ways of communicating so be sure to follow them but generally, people are welcoming and happy to help 😀.",{"type":415,"tag":416,"props":2317,"children":2318},{},[2319],{"type":420,"value":2320},"Just to give you a few examples of communities:",{"type":415,"tag":454,"props":2322,"children":2323},{},[2324,2335,2346,2357,2367,2378],{"type":415,"tag":458,"props":2325,"children":2326},{},[2327,2333],{"type":415,"tag":423,"props":2328,"children":2331},{"href":2329,"rel":2330},"http://aka.ms/functions/discord",[427],[2332],{"type":420,"value":257},{"type":420,"value":2334}," has a discord community",{"type":415,"tag":458,"props":2336,"children":2337},{},[2338,2345],{"type":415,"tag":423,"props":2339,"children":2342},{"href":2340,"rel":2341},"https://discord.gg/NtAbbGn",[427],[2343],{"type":420,"value":2344},"Nushell",{"type":420,"value":2334},{"type":415,"tag":458,"props":2347,"children":2348},{},[2349,2355],{"type":415,"tag":423,"props":2350,"children":2353},{"href":2351,"rel":2352},"https://slack.pulumi.com/",[427],[2354],{"type":420,"value":312},{"type":420,"value":2356}," has a slack community",{"type":415,"tag":458,"props":2358,"children":2359},{},[2360,2366],{"type":415,"tag":423,"props":2361,"children":2364},{"href":2362,"rel":2363},"https://communityinviter.com/apps/nukebuildnet/nuke",[427],[2365],{"type":420,"value":365},{"type":420,"value":2356},{"type":415,"tag":458,"props":2368,"children":2369},{},[2370,2377],{"type":415,"tag":423,"props":2371,"children":2374},{"href":2372,"rel":2373},"https://discord.gg/redis",[427],[2375],{"type":420,"value":2376},"Redis",{"type":420,"value":2334},{"type":415,"tag":458,"props":2379,"children":2380},{},[2381,2388],{"type":415,"tag":423,"props":2382,"children":2385},{"href":2383,"rel":2384},"https://chat.vitest.dev/",[427],[2386],{"type":420,"value":2387},"Vitest",{"type":420,"value":2334},{"type":415,"tag":416,"props":2390,"children":2391},{},[2392],{"type":420,"value":2393},"You can see there are companies behind some communities (like Redis or Pulumi). In any case, communities backed by a company or not, Discord and Slack communities are a good place to discuss with people building the software you are using. There are a lot of communities whether it be on Discord, Slack, or on other tools. So I'm sure that whatever you need help with, you will find a community to join.",{"type":415,"tag":624,"props":2395,"children":2396},{"icon":1739},[2397],{"type":415,"tag":416,"props":2398,"children":2399},{},[2400,2402,2409],{"type":420,"value":2401},"If you want to know more about that, you can check the third article of my series \"How to do a technology watch?\": ",{"type":415,"tag":423,"props":2403,"children":2406},{"href":2404,"rel":2405},"https://www.techwatching.dev/posts/technology-watch-part3",[427],[2407],{"type":420,"value":2408},"Be part of the community",{"type":420,"value":723},{"type":415,"tag":434,"props":2411,"children":2413},{"id":2412},"use-twitter-to-get-some-help",[2414],{"type":420,"value":2415},"Use Twitter to get some help",{"type":415,"tag":416,"props":2417,"children":2418},{},[2419],{"type":420,"value":2420},"I don't know if you use Twitter for technology content but it's an amazing platform for everything related to IT. Not because it's a better microblogging platform than others (I know that Twitter is quite criticized right now because of security and privacy concerns), but because of all the people and organizations that use it. Lots of software products or frameworks have their own Twitter account and there are even some dedicated support accounts.",{"type":415,"tag":2036,"props":2422,"children":2424},{"className":2423},[2039,2040],[2425],{"type":415,"tag":2043,"props":2426,"children":2428},{"id":2427},"1558416474565394434",[],{"type":415,"tag":416,"props":2430,"children":2431},{},[2432],{"type":420,"value":2433},"On Twitter, you can also join Communities which are spaces created by people to engage with others who share interests. For instance, if you are struggling with C# code, you could join the dotnet community and tweet your question, some might have encountered the same issue and know how to solve it.",{"type":415,"tag":416,"props":2435,"children":2436},{},[2437],{"type":415,"tag":587,"props":2438,"children":2442},{"alt":2439,"className":2440,"src":2441,"width":1223},"Twitter website that displays several communities: Vue.js, Microsoft Azure, dotnet.",[591,592],"/posts/images/getunstuck_twitter_communities.png",[],{"type":415,"tag":416,"props":2444,"children":2445},{},[2446],{"type":420,"value":2447},"What I find extraordinary with Twitter is to be able to reach some people that I could not have reached otherwise. And I am not talking only about developer advocates who are easier to approach, but people building the products I am using. When someone from a team building Xamarin, Azure, winget, or GitHub takes the time to explain to you something you are struggling with just by answering your tweet it's always nice. Of course, sometimes people don't see your tweet or don't have the time to answer. However, by experience people on Twitter are usually very kind and answer. Obviously, I don't spend my time harassing developers on Twitter with my questions but I had interesting answers to my tweets and some nice exchanges by private message too.",{"type":415,"tag":2036,"props":2449,"children":2451},{"className":2450},[2039,2040],[2452],{"type":415,"tag":2043,"props":2453,"children":2455},{"id":2454},"1559993129603895297",[],{"type":415,"tag":434,"props":2457,"children":2458},{"id":933},[2459],{"type":420,"value":936},{"type":415,"tag":416,"props":2461,"children":2462},{},[2463],{"type":420,"value":2464},"I hope you learned something and that these tips will help you get unstuck next time you face a programming problem. To finish I want to give you one last tip when stuck with a difficult programming problem: once you find the solution write it down somewhere so that you can find it later when you face the same issue again (because you might not remember what was the solution). You can write it in your notes 🗒️ with links to articles that help you solve the problem, or even better you can write a blog post about it.",{"type":415,"tag":416,"props":2466,"children":2467},{},[2468,2470,2477],{"type":420,"value":2469},"This article is part of the ",{"type":415,"tag":423,"props":2471,"children":2474},{"href":2472,"rel":2473},"https://townhall.hashnode.com/4-articles-in-4-weeks-hashnode-writing-contest",[427],[2475],{"type":420,"value":2476},"4 articles in 4 weeks Hashnode writing contest",{"type":420,"value":723},{"type":415,"tag":416,"props":2479,"children":2480},{},[2481],{"type":420,"value":2482},"Happy learning.",{"title":401,"searchDepth":971,"depth":971,"links":2484},[2485,2486,2487,2488,2489,2490],{"id":2121,"depth":971,"text":2124},{"id":2188,"depth":971,"text":2191},{"id":2227,"depth":971,"text":2230},{"id":2290,"depth":971,"text":2293},{"id":2412,"depth":971,"text":2415},{"id":933,"depth":971,"text":936},"content:1.posts:41.get-unstuck.md","1.posts/41.get-unstuck.md",{"_path":127,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":126,"description":2494,"lead":2495,"date":2496,"badge":2497,"image":2498,"tags":2500,"body":2501,"_type":979,"_id":2685,"_source":981,"_file":2686,"_extension":983},"In this article, I share some thoughts about what made me want to be and continue to be a developer.","Some thoughts about how and why I became a developer","2022-08-20T00:00:00.000Z",{"label":408},{"src":2499},"/images/everyone_can_code.jpg",[360],{"type":412,"children":2502,"toc":2679},[2503,2507,2513,2518,2527,2532,2537,2543,2548,2557,2562,2567,2576,2581,2598,2603,2608,2614,2619,2627,2636,2641,2646,2655,2659,2664,2675],{"type":415,"tag":416,"props":2504,"children":2505},{},[2506],{"type":420,"value":2494},{"type":415,"tag":434,"props":2508,"children":2510},{"id":2509},"the-always-wanted-to-be-a-developer-fairy-tale",[2511],{"type":420,"value":2512},"The \"always wanted to be a developer\" fairy tale",{"type":415,"tag":416,"props":2514,"children":2515},{},[2516],{"type":420,"value":2517},"I often see people on social networks writing about how they have always wanted to be a developer, how they started programming as kids, and how they have built their first websites in high school or before. Sorry to disappoint you, but that's not me. I have never programmed anything when I was a kid 🧒. Yes, I used a computer but that was to play video games not something geeky. I only discovered computer science after high school when I was preparing for the selective entrance examination to French engineering schools. The computer science class was an optional class but I enjoyed it. I enjoyed it more than the advanced mathematics and physics courses that I liked but that were becoming too abstract for me. It convinced me that I should study in a software engineering school to become a developer. There I discovered what being a developer was really about, and became fond of it ❤️.",{"type":415,"tag":416,"props":2519,"children":2520},{},[2521],{"type":415,"tag":587,"props":2522,"children":2526},{"alt":2523,"className":2524,"src":2525},"A pair of feet standing in front of a sign that says passion led us here.",[591,592],"/posts/images/be_a_developer_1.jpg",[],{"type":415,"tag":416,"props":2528,"children":2529},{},[2530],{"type":420,"value":2531},"Hence, no \"always wanted to be a developer\" fairy tale for me 📖. No years of practicing software development before studying it during higher education. And that's okay by me. I think you don't have to be passionate about development since your childhood to become a developer. Moreover, it's not because you did not build your first website before 15 years old that you are not going to be a good developer or that others will always be better than you. You don't even need to get a computer science degree to become a software developer. I graduated in computer science and I am happy with my education but there are many other ways to become a developer (self-learning, training programs, coding bootcamps, career change, ...) 👨‍💻.",{"type":415,"tag":416,"props":2533,"children":2534},{},[2535],{"type":420,"value":2536},"I explained how I became a developer but not exactly why, which brings us to the second part of this article.",{"type":415,"tag":434,"props":2538,"children":2540},{"id":2539},"why-because-its-fun",[2541],{"type":420,"value":2542},"Why? because it's fun!",{"type":415,"tag":416,"props":2544,"children":2545},{},[2546],{"type":420,"value":2547},"Lots of people want to become developers because they are lots of job opportunities, the salary is usually good 💶 and you can work for nice companies. That's true, but we often forget the main thing: coding is fun 😁! It's like playing a game in which you have to solve problems. I still like playing video games in my free time (I don't do it often though), but sometimes I can spend a better time coding than playing video games 🎮. It just feels great writing code and solving problems!",{"type":415,"tag":416,"props":2549,"children":2550},{},[2551],{"type":415,"tag":587,"props":2552,"children":2556},{"alt":2553,"className":2554,"src":2555},"A close up of a white puzzle piece.",[591,592],"/posts/images/be_a_developer_2.jpg",[],{"type":415,"tag":416,"props":2558,"children":2559},{},[2560],{"type":420,"value":2561},"Moreover, when you develop, you are building something. Something that may be digital/virtual but that helps people in the real world. It's amazing when you realize that with coding skills you have the opportunity to build anything you like: applications that run on your laptop, on your smartphone, on your watch, in your browser, in the cloud, in your IoT device, in your car... Software runs the world and you can help build it 🌍.",{"type":415,"tag":416,"props":2563,"children":2564},{},[2565],{"type":420,"value":2566},"Nowadays, IT is everywhere so you can work in many different fields. Whether your work in the energy industry or e-commerce, you will still be coding but the software you are developing will have different business needs and constraints. It means, you can work for a variety of companies, and discover different businesses while being a developer. Being able to work for different businesses is the case in other professions but this is especially true for developers. And even if you only ever work for one business, IT is a big field so your job can be very different depending on what type of software you are working on 💻.",{"type":415,"tag":416,"props":2568,"children":2569},{},[2570],{"type":415,"tag":587,"props":2571,"children":2575},{"alt":2572,"className":2573,"src":2574},"A laptop computer sitting on top of a white table.",[591,592],"/posts/images/be_a_developer_5.jpg",[],{"type":415,"tag":416,"props":2577,"children":2578},{},[2579],{"type":420,"value":2580},"Of course, it's hardly a bed of roses. Just because it's fun does not mean it's easy to be a developer. IT is a fast-moving industry, so it's very hard to keep up to date with new frameworks, libraries, language features, cloud components... 🚀 Everything is evolving rapidly so you never stop learning. But it's part of what makes software development great, you are always learning something new 👍. I must confess you can sometimes feel like a beginner when you start working on something new, and even with several years of experience, you can suffer from impostor syndrome. Yet, when you realize how far you have come, how much you have learned, it just feels nice working as a developer.",{"type":415,"tag":624,"props":2582,"children":2583},{"icon":1739},[2584],{"type":415,"tag":416,"props":2585,"children":2586},{},[2587,2589,2596],{"type":420,"value":2588},"If you are interested in how to keep up to date with the latest things in IT, I wrote ",{"type":415,"tag":423,"props":2590,"children":2593},{"href":2591,"rel":2592},"https://www.techwatching.dev/posts/technology-watch-part1",[427],[2594],{"type":420,"value":2595},"a series of 3 articles about how to do a technology watch",{"type":420,"value":2597}," 📚.",{"type":415,"tag":416,"props":2599,"children":2600},{},[2601],{"type":420,"value":2602},"I think it's important not to speak only about the positive aspects of being a developer. I love my job but it's not always easy. Sometimes you get stuck on a problem for a few days, your code won't work, and you think nobody can help you 😿. Unless you are implementing complex algorithms, writing code is not hard but making it work is something else. Because being a developer is not only about writing code, there is much more to it than that: teamwork, understanding the business needs, designing software, debugging - building - packaging - deploying - testing - monitoring your code ... 🛠️ So yes it's a challenging job, but I like challenges. At the end, when things finally work, you ship your code to production, and the users are happy it's very rewarding 😀.",{"type":415,"tag":416,"props":2604,"children":2605},{},[2606],{"type":420,"value":2607},"All that is what made me want to be a developer. Nevertheless, the developer's job leads to many other professions, so after a few years should I stay a developer?",{"type":415,"tag":434,"props":2609,"children":2611},{"id":2610},"the-real-question-what-makes-me-want-to-stay-a-developer",[2612],{"type":420,"value":2613},"The real question: what makes me want to stay a developer?",{"type":415,"tag":416,"props":2615,"children":2616},{},[2617],{"type":420,"value":2618},"I don't know if it's the same in other countries, but in France, developer is often seen as an entry-level job. According to many companies, as you gain in experience, you should either become a technical expert in a specific field or a project manager leading a team. Being a \"simple\" yet experienced developer is often seen as a failure when you grow \"old\". Your experience and knowledge as a developer are not so much valued 💶, and if you wish to develop your career you should be managing projects better than programming. So what makes me want to stay a developer then?",{"type":415,"tag":624,"props":2620,"children":2621},{"icon":1852},[2622],{"type":415,"tag":416,"props":2623,"children":2624},{},[2625],{"type":420,"value":2626},"It's weird to encourage experienced developers to become project manager because it's not the same job and it does not require the same skills. Therefore a well experienced developer can easily become a bad project manager. I have nothing against developers becoming project managers, if you want to, do it, it's great but you should not have to do it just to get promoted or have a better salary. Hopefully, not all the companies think like that but still, that's a problem in France.",{"type":415,"tag":416,"props":2628,"children":2629},{},[2630],{"type":415,"tag":587,"props":2631,"children":2635},{"alt":2632,"className":2633,"src":2634},"A heart is shown on a computer screen with 0s an 1s.",[591,592],"/posts/images/be_a_developer_4.jpg",[],{"type":415,"tag":416,"props":2637,"children":2638},{},[2639],{"type":420,"value":2640},"I want to stay a developer because I love programming 💖. I don't want to be a technical expert or a project manager telling people what to code but hardly coding at all himself. I like programming, it's what I currently do, and it's what I want to keep doing. And I don't just want to stay a developer, I want to become a better developer. I want to continue to grow and develop new skills.",{"type":415,"tag":416,"props":2642,"children":2643},{},[2644],{"type":420,"value":2645},"As a developer, there are so many things to learn, so many technologies to discover, and IT keeps evolving. For the years to come, I want to continue learning new languages and frameworks, use the latest trendy tools, be amazed by new technologies, build software that helps people, and share with others what I will have learned along the journey.",{"type":415,"tag":416,"props":2647,"children":2648},{},[2649],{"type":415,"tag":587,"props":2650,"children":2654},{"alt":2651,"className":2652,"src":2653},"A man walking past a sign that says love to learn.",[591,592],"/posts/images/be_a_developer_3.jpg",[],{"type":415,"tag":434,"props":2656,"children":2657},{"id":1921},[2658],{"type":420,"value":1924},{"type":415,"tag":416,"props":2660,"children":2661},{},[2662],{"type":420,"value":2663},"Many things made me want to be a developer and stay one. Being a developer is awesome, I am grateful to do a job that I am passionate about.",{"type":415,"tag":416,"props":2665,"children":2666},{},[2667,2669,2674],{"type":420,"value":2668},"I don't often write non-technical articles and even fewer articles that talk about me. I hope you enjoyed reading this article anyway. This article is part of the ",{"type":415,"tag":423,"props":2670,"children":2672},{"href":2472,"rel":2671},[427],[2673],{"type":420,"value":2476},{"type":420,"value":723},{"type":415,"tag":416,"props":2676,"children":2677},{},[2678],{"type":420,"value":2482},{"title":401,"searchDepth":971,"depth":971,"links":2680},[2681,2682,2683,2684],{"id":2509,"depth":971,"text":2512},{"id":2539,"depth":971,"text":2542},{"id":2610,"depth":971,"text":2613},{"id":1921,"depth":971,"text":1924},"content:1.posts:40.be-a-developer.md","1.posts/40.be-a-developer.md",1716749600648]