- How do you work through being “stuck” on a problem?
- This is an interesting question because my debugging and problem solving skills have Evolved, yes with a capital E, this semester. I’ve been working on modularizing an existing project. I didn’t really know C# before starting the project. I’d worked with a ton of C# exceptions for work, but actual, working C# code was limited to some personal projects to bring me up to speed on work projects. So I had to learn a new language, AND learn software architecture. I’ve developed two, symbiotic, potentially competing toolchains to deal with those difficulties.
- Toolchain #1: Books. Yes, as in 1500s-era technology, cut-down-a-tree books. I bought the books Clean Code and Clean Architecture and they have revolutionized how I approach programming. Before, I was stuck on details. How exactly do you name a function? How do you know that function won’t come back to haunt you as a mess of bugs? Debugging and coding was often a nightmare cycle of learning new errors and behaviors, and slowly removing them the hard way. The above books, plus some others, gave me new conceptual frameworks and paradigms to use when designing and implementing code. It gave me a method.
- Which leads me to…
- Toolchain #2: ChatGPT. Now, I should be careful to specify that my project is under an NDA, so I can’t load the project’s data, code or structure directly into ChatGPT. I can, however, ask it questions like “how would you use X design pattern and Y clean architecture principle to produce XYZ behavior in C#?” My choice of validator for the project, my discovery of dependency injection, and most of my coding best standards come directly from ChatGPT. Most of my architectural rewriting has come from ChatGPT. It needs a lot of iteration and review, especially when working on conceptually more challenging concepts like architecture, because the usefulness of ChatGPT is directly proportional to the skillset of the human programmer. If I didn’t know to ask about clean architecture, ChatGPT wouldn’t really suggest it. But now that I do know, iteratively improving my code is much, much easier. I’ve probably used it most for weird Visual Studio errors, most of which involve improper dependency injection. Again, just to clarify, there’s a sort of manual process I have to use to convert from conceptual, architectural and even C#-best practice concerns to the NDA-covered code, but it’s still a great debugging and architectural tool.
- How do you approach learning something new, like a new technology?
- I really like reading best practices before jumping in. I started working on Java for a job offer a few months ago, and Java has a bit of an overlap with C#. So I’ve been reading best practices for awhile on this type of web-native, object-oriented programming. I bought the Gang of Four book for that very purpose. I’ve also begun simply asking ChatGPT. The learning curve is massively diminished when you can ask a tool, “in Node.js you can do this, how would you do it in .NET 7.0? Please ask clarifying questions so you understand what I am trying to accomplish.”
- Do you use chatGPT or other AI tools? In what way?
- Yeah, as I said, I use it a lot. I use it as a reference guide and stack overflow replacement. I think there are some privacy and IP concerns and don’t want to get too dependent, especially if I work in a company that has to block the tool. However, for bringing your knowledge up to speed on a new language, framework, technology or design idea, it’s great. It’s been especially useful for “I want to do this thing in Python, but the project is in C#. How would I do that in C# using this set of best practices?” To my disappointment, C# does not have decorators. However, ChatGPT showed me how to setup custom dictionaries, how to use a method as an observer pattern to basically run a decorator, and otherwise how to optimize C# code. I think this is the future of software engineering. I also think, technically, it makes me a bit of a cyborg. So that’s fun.
- What are some debugging methods you use. Do they usually work?
- Visual Studio has a lot of power, and a lot of complexity. The complexity has, in the past, led me to dislike it because I found debugging difficult.. Similarly, debugging in Python is a bit easier than in a web framework because Python is not asynchronous. I know it can be, but I mean in my usual use cases such as data analysis and extraction or text based game development. I’ve also begun using ChatGPT for particularly obscure bugs because it explains how to avoid the problem. This is especially important when the proposed solution further modularizes the code.
- Anything project related. You choose.
- My project team hit an exhilarating moment this week when we realized we were going to meet the expectations of the project and perhaps even exceed them. We’ve got it all hosted and deployed, a massive architectural rewrite has been accomplished, and now we’re just testing and connecting the frontend to the backend. It’s been a great few days.
Blog Post 4: We’ve got this
by
Tags:
Leave a Reply