CI/CD Pipeline Security: Learn 9 key steps for administering comprehensive security on your CI/CD pipelines with an open-source tech stack.
Full-Stack Observability Essentials: Explore the fundamentals of system-wide observability and key components of the OpenTelemetry standard.
There are several paths to starting a career in software development, including the more non-traditional routes that are now more accessible than ever. Whether you're interested in front-end, back-end, or full-stack development, we offer more than 10,000 resources that can help you grow your current career or *develop* a new one.
Embracing 'Hit Refresh': A Blueprint for Engineering Excellence
How Can Low-Code Tools Reduce Cost During Recession
In the dynamic realm of technology, continuous learning, innovation, and adaptability are the keys to success. While many senior and middle developers have already honed their skills, staying at the forefront of the ever-evolving tech landscape requires more than just experience. It demands a proactive approach to learning and a thirst for new challenges. One potent way to achieve this is by participating in hackathons. Hackathons, often seen as a domain for aspiring developers or tech enthusiasts, offer significant advantages for experienced developers as well. In this article, we'll explore why senior and middle developers should consider participating in hackathons and how these events can be instrumental in their ongoing career growth and innovation. 1. The Learning Never Stops Regardless of your experience level, the tech industry is in a perpetual state of evolution. New languages, frameworks, and technologies emerge regularly. Hackathons provide a structured environment to explore these emerging technologies and learn by doing. It's a golden opportunity to step out of your comfort zone and tackle real-world challenges using cutting-edge tools. By participating in a hackathon, you can gain hands-on experience with the latest trends and innovations in the industry. This knowledge not only keeps your skill set relevant but also positions you as a tech leader who can adapt to change effortlessly. 2. Sharpen Problem-Solving Skills Hackathons are essentially intensive problem-solving competitions. They present you with complex challenges and tight deadlines, forcing you to think creatively and devise efficient solutions. These events push you to your limits, fostering your ability to solve intricate problems swiftly—a skill that's invaluable in your everyday work as a developer. The problem-solving skills you enhance during a hackathon can be directly applied to your regular projects, making you a more efficient and effective developer. 3. Networking and Collaboration Hackathons attract diverse participants, from seasoned developers to industry experts and even entrepreneurs. Engaging with this varied group exposes you to different perspectives, approaches, and experiences. It's an opportunity to collaborate with professionals from various domains and build a network that can prove beneficial in your career. Collaboration during hackathons can also lead to exciting new projects or partnerships. You might find like-minded individuals who share your passion for a specific technology or startup idea, opening doors to innovative ventures. 4. Portfolio Enhancement The projects you work on during hackathons can become valuable additions to your portfolio. These real-world, problem-solving experiences can impress potential employers or clients. They demonstrate your ability to apply your skills in a practical context and showcase your commitment to continuous learning and growth. 5. Creativity Unleashed Hackathons encourage creative thinking and experimentation. Without the constraints of a typical work environment, you can explore unconventional solutions and take risks. This creative freedom can lead to groundbreaking ideas or innovative approaches that you might not have considered otherwise. 6. A Break from Routine Even senior and middle developers can sometimes feel stuck in a routine. Hackathons provide a refreshing break from the daily grind. They inject excitement and adrenaline into your work, reigniting your passion for coding. 7. Mentorship Opportunities Many hackathons feature mentors or judges who are industry experts. Engaging with these professionals can be an invaluable learning experience. They can provide guidance, feedback, and insights that you may not easily access in your regular work environment. 8. Prizes and Recognition Let's not forget the potential rewards. Hackathons often offer prizes, which can range from cash awards to job opportunities or cutting-edge tech gadgets. Even if you don't win, the recognition and exposure you gain can boost your professional profile. Parting Thoughts In conclusion, hackathons are not just for newcomers or tech enthusiasts; they are a powerful tool for senior and middle developers to foster continuous learning, innovation, and growth. These events provide a platform to learn, collaborate, and push your boundaries—all essential elements for success in the fast-paced world of technology. So, if you're a senior or middle developer looking for your next challenge, consider joining a hackathon. Embrace the opportunity to learn, create, and connect—it may just be the catalyst for the next exciting phase of your career.
For many years, the idea of liability for defects in software code fell into a gray area. You can find debate about the topic going back and forth since at least the early 1990s. Throughout, software developers argued that they shouldn't be held liable for coding flaws that are both difficult to detect and sometimes even harder to fix. And in any case, knowingly exploiting software defects for nefarious purposes is a crime already — so shouldn't cyber criminals alone bear the responsibility for their actions? As a result of these arguments, there haven't been any serious attempts to pass legislation making developers liable for flaws in their code. And for even more ironclad protection, most software developers also include liability waivers in their EULAs. However, there's reason to believe that the winds surrounding this issue are beginning to shift. As a result of high-level policy reviews originating in the White House, multiple federal agencies, including the NSA, FBI, and CISA, are now calling for developers to develop workflows that make their software products secure by design and by default. And if that's the stance the US's top law enforcement agencies are going to take from now on, it's reasonable to assume that some kind of regulatory or statutory changes to that effect may soon follow. The mere suggestion of such changes, however, should be enough to spur the most sensible software developers into taking action. The good news is that it shouldn't be difficult for most to cover their bases with respect to software liability. To get them started, here are four steps developers can take right now to guard against potential changes to software liability laws. Build Security Checks Into Software Pipelines The first thing to do to head off software liability concerns is to create security checkpoints throughout your development processes. This should begin with thorough code review and certification processes for all repurposed code. This is essential since most software developers now rely on reused open-source code or on self-created code libraries that speed up the development of new software. But as the recent Log4j security incident demonstrated, reused code can introduce vulnerabilities into new software that come back to haunt you. So, it's a good idea to formalize a process whereby you can attest to the security of all reused code — both internally developed and otherwise — before it makes it into production software. Then, it's a good idea to make extensive use of source code security analyzers throughout the development process. This can make it more likely to identify security issues early on while they're still relatively easy to fix. It can also serve as evidence of your efforts at secure code development, should questions arise after a finished product release. Commit to 3rd-Party Pre-Release Code Security Audits The next thing to do to guard against potential software liability concerns is to commit to having all software products go through a 3rd-party code security audit prior to release. This provides yet another opportunity to fix security flaws before they can cause liability issues. Plus, it guarantees that an expert, neutral set of eyes goes over your work before it ships. That can help to combat the kind of vulnerability blindness that often afflicts development teams who become accustomed to reviewing their own work. It can also reassure customers that no efforts were spared to put their security front and center in the development process. Provide Adequate Customer Support In recognition of the fact that no software is ever bulletproof, it's a good idea to develop a plan to support customers in the event they're affected by a security issue in one of your software products. For business customers, this might extend to providing direct and/or contracted technical support to aid recovery efforts after a security incident. Of course, you can only take such efforts so far due to the costs involved, but being there for an affected customer could head off any attempts to hold you liable. For individual customers, it's also smart to partner with an identity protection firm to have them ready to assist if your software suffers a security issue that might lead to identity theft. According to Hari Ravichandran, CEO of Aura, "Competent identity fraud prevention can be an inexpensive way to prevent users from suffering financial losses in the first place. It's a great way to limit liability in the aftermath of a software or data breach." Purchase the Right Liability Insurance Even if you go to great lengths to find and fix every bug and potential security flaw, it's always possible for something to go overlooked. As a result, it's a good idea to come up with a liability risk management plan that includes proper insurance coverage. This is essential because, although there aren't any specific laws or regulations making software developers liable for losses stemming from the use of their products, general product liability laws can and do get applied to developers on occasion. The good news is that the preceding secure code development practices should go a long way to proving good faith in any potential liability case. However, there's no way to eliminate the risk of losses stemming from even a frivolous lawsuit. Therefore, to protect yourself, it's a good idea to carry errors and omissions (E&O) insurance and a general product liability insurance policy at the very least. The Takeaway The bottom line is that it's just a good idea for software developers to get their code security ducks in a row now to prepare for any coming shifts in software liability law. Plus, they should develop plans to deal with the aftermath of a security event involving their software now. That way, whether there's any change to the existing liability status quo or not, they'll be ready to handle any potential outcome.
If you're considering working in DevOps, you're likely aware that it can be a challenging and rewarding field. The good news is that there are several key steps that you can take to launch a successful career. Starting a successful career in DevOps requires more than just technical skills. It's equally important to understand industry-specific knowledge, tools, and methodologies to maximize the impact of your technical skills. One of the most important things you can do is to dive in with determination and adaptability. 1. Understand the Fundamentals of DevOps DevOps is a term that has been gaining popularity in the world of tech. It is a combination of the cultural and technical aspects of the software development process. In simple terms, DevOps is a way of deploying and managing technology. It focuses on collaboration, communication, automation, monitoring, and fast feedback. DevOps brings together the development and operations teams to work on the same projects with the same goals in mind. The main idea behind DevOps is to streamline the software development process, reduce inefficiencies, and improve the speed of delivery. It is a new way of thinking about software development that has transformed a lot of organizations, especially those that leverage distributed systems and cloud computing. 2. Acquire the Necessary Technical Skills Any aspiring DevOps professional must learn the essential DevOps tools such as Jenkins, Docker, Kubernetes, and Ansible or Terraform. Each of these tools provides a unique feature set that allows for better processes and automation in software development. It is important to understand how these components interact with each other to create an efficient system. Infrastructure as Code and CI/CD pipelines are concepts that are the backbone of the DevOps culture and provide the foundation for streamlined and efficient software development processes. Infrastructure as Code ensures the entire infrastructure is programmable, making it easier to manage and reproduce. Continuous integration allows for frequent code changes and testing to be done, ensuring that the code is always functional and improving. Continuous deployment is the heart of DevOps, as it allows developers to release new features and updates in a timely and efficient manner. Without a deep understanding of these core concepts, aspiring DevOps engineers will struggle to succeed in their roles and keep up with the demands of the industry. 3. Gain Practical Experience When it comes to starting a successful career in any technical field, gaining practical experience is essential. Learning theory is only useful to a certain extent. To truly understand the ins and outs of the day-to-day responsibilities, it is necessary to have hands-on experience. One way to gain practical experience is by joining open-source projects or contributing to community initiatives. This offers an opportunity to learn from others while also building a portfolio of work. Pursuing internships or entry-level positions is another great way to gain practical experience. This could help you understand how to work on real projects with an experienced team, further developing your skills. Finally, creating personal projects can serve as a way to practice and demonstrate skills to potential employers. Having a well-maintained GitHub repository also helps you build your online presence. 4. Attend DevOps Events Networking has always been an important aspect of any industry. It allows professionals to broaden their horizons, generate new ideas, and expand their knowledge. As a DevOps professional, you can benefit greatly from attending popular events, webinars, and meetups dedicated to discussing and showcasing breakthrough approaches and practices. Follow a DevOps conferences list to make sure you don’t miss anything happening near you and add the most interesting events to your calendar. These events can provide an opportunity to connect with people who share your interests and aspirations while also honing your skills through engaging in discussions, workshops, and training sessions. You may also discover new technologies, methodologies, and solutions that could help you become more competitive and successful in your work. 5. Continuously Update Your Skills Continuous learning is no longer just an option - it's necessary to succeed personally and professionally. This is where platforms like Udemy, Coursera, and Pluralsight come in handy, offering advanced DevOps courses that help professionals stay up-to-date with the latest industry developments. With the help of these courses, you can continuously update your skills without having to sacrifice your commitments. This point also ties nicely with gaining more practical experience. Consider challenging yourself with new problems to solve to learn even more while building your technical portfolio. 6. Understand the Broader Tech Ecosystem Having an interdisciplinary knowledge base is essential for top performance — not just from a technical standpoint but also from an organizational one in the future. This means that you should have at least a basic understanding of different aspects of technology like networks, databases, coding languages, and tools used in development environments so you can identify potential issues before they become real problems. Moreover, great communication between colleagues who use different technologies is key to successful collaboration within teams—interdisciplinary knowledge is crucial here as well. Understanding the broader tech ecosystem will help you come up with creative solutions to complex problems or develop innovative approaches to address customer needs better than competitors do. In practice, this means keeping active track of new trends, such as AI/ML applications or serverless computing, so that you can adjust strategies accordingly when these new mechanisms are introduced into your organization's systems and subsequently craft smarter solutions faster than ever before. Wrapping Up DevOps can be a challenging yet rewarding path, with endless opportunities to grow and learn. The key to success lies in your determination and adaptability. The world of DevOps is constantly evolving, and the only way to stay ahead of the game is to continuously learn and improve your skills. Launching your career requires taking key steps, such as learning essential coding languages, earning relevant certifications, and gaining practical experience through internships or personal projects. So don't hesitate. Jump in with both feet and embrace the ever-changing landscape of DevOps.
The modern digital business landscape demands enterprises to undergo digital transformation to remain competitive and relevant. However, the digital transformation journey isn’t a bed of roses and brings challenges, one of the most daunting being resistance to change. Undoubtedly, CIOs are at the forefront of innovation, and they’re the ones who can swiftly navigate the digital revolution by adopting cutting-edge technologies. However, most of them are resistant to significant changes. And this isn’t a good sign from a growth perspective! Many enterprises keen on embracing the digital revolution often need help with internal issues, including pushbacks, that hinder progress. And here’s where CIOs need to gear up for massive changes by overcoming the complexities of resistance to change. Let’s uncover the reasons for resistance on the growth path and explore some time-tested methodologies for CIO success. The Digital Imperative and Its Turbulent Path Jumping on the digital transformation bandwagon isn’t merely a choice; it’s imperative in a modern digital business landscape since it ensures enhanced efficiency and excellent customer experiences. Admit it: Customers are interacting with renowned brands on diverse platforms. And they know what a great user experience feels like. Hence, they expect you to deliver a similar experience or something close to it. On the other hand, modern tools and technologies, including AI, ML, and cloud computing, are helping businesses streamline their operations and improve overall user experience without compromising security. Yet, despite these lucrative business benefits, the human element isn’t comfortable with the change. Navigating the digital transformation journey isn’t a piece of cake. CIOs must take a giant leap and be comfortable with every mandatory change and turbulence to ensure overall business success. But before that, understanding the roots of the resistance to change is the initial and essential step toward effectively managing these hurdles. Unveiling the Drivers of Resistance When we talk about what causes resistance for CIOs while they dream of the digital transformation of their business, the list is quite long. Here are some of the most prominent drivers of resistance that must be addressed to ensure a seamless digital transformation. By understanding these drivers, CIOs can effectively tailor their strategies to address specific challenges. Fear of the Unknown As we know, change disrupts the status quo and typically introduces uncertainty. One common concern while introducing technology into your organization is that employees may fear that digital transformation will render their skills obsolete and lead to job displacement. Moreover, unknown fears could hinder the introducing of cutting-edge technology and tools for enhancing operational efficiency. Due to this fear among employees, CIOs may sometimes need help to take the initial steps to incorporate technology into their processes. Loss of Control As we know, navigating the digital transformation journey can shift traditional hierarchies and power dynamics. This could lead to resistance from individuals accustomed to specific roles and responsibilities. Employees need to gain control of their responsibilities and may have lesser value once technology is invoked in the overall processes. And sometimes, they may also fear that they'll slowly and gradually lose their jobs. Apart from this, if an organization has a history of being resistant to change, it can perpetuate a culture of inertia. Thus, CIOs must work closely with the human resources department to foster a culture that values adaptation and innovation. Emotional Impact Technological change can also evoke emotions, from anxiety to excitement. Acknowledging these emotions and offering avenues for employees to express their feelings is undoubtedly the job of a CIO. The emotional impact of change within the organization should be channeled in the right direction to ensure fruitful results. Crafting Strategies for CIO Success Clear Communication and Vision As a CIO, you must establish a clear communication strategy since it’s one of the foundational elements in overcoming resistance to change. You can start by explaining the digital transformation's vision, benefits, and goals to the entire organization. By fostering a shared understanding, your employees could easily comprehend the significance of essential changes and eventually feel more invested in the whole process. Inclusive Change Management Another crucial step that can help you implement technological advancements is involving your employees in the planning and decision-making stages. Active involvement of employees will eventually foster a sense of ownership and reduce resistance to change. CIOs must proactively seek input from various departments and levels of the organization, address concerns, and tailor the transformation to align with different needs. Educational Initiatives As we discussed earlier, the fear of the unknown is undoubtedly a significant driver of resistance. Thus, CIOs must emphasize educational initiatives to help employees understand the latest technologies and processes. Organizing various workshops, training sessions, and informational resources could empower employees and significantly alleviate apprehensions. Empathetic Leadership As a CIO, you must exhibit empathy and patience during the transition. Acknowledging employees’ concerns and offering them a supportive environment could help reduce resistance. Also, the leaders who lead by example in embracing change could quickly influence others to follow suit. Empathetic leadership goes a long way in the overall digital transformation journey and thriving business success. Small and Quick Wins Last, breaking down the entire transformation process into manageable steps and phases while celebrating small wins could be the best way to navigate the journey flawlessly. Quick wins show that the changes are beneficial, build employee confidence, and motivate them to participate in the significant transformation. To Conclude The modern digital landscape portrays CIOs as change agents and not merely technology implementers. Hence, navigating resistance to change during digital transformation demands a strategic blend of leadership, empathy, and communication. By embracing the insights and strategies mentioned above, CIOs can steer their organizations through hurdles of resistance and emerge victorious on the shores of digital innovation.
Artificial intelligence has proliferated across industries and sectors. Be it education, astrology, food and beverages, engineering, or medicine — AI applications are found in all and sundry. Software engineers, programmers, and developers can utilize Artificial Intelligence tools to 10X their productivity with enhanced efficiency. Writing code is an exciting yet tedious job. With the help of AI tools, error-less secured codes can be written fast. AI is here to make the life of our computer programmers conveniently easier with the below-mentioned five free AI tools. What Are AI Tools in Programming or Coding? AI coding tools act as assistants and assist programmers and developers in writing error-free and accurate codes. They are also efficient at completing codes with initial prompts and providing suggestions in real time for betterment. Qualities of an AI tool Amazon CodeWhisperer The coding companion, the Amazon CodeWhisperer, helps developers build applications faster with extreme security. More than a billion lines of code have been used to train CodeWhisperer which enables it to garner a wide range of intelligent code suggestions in real-time. Be it snippets or completely functional functions based on your prompts or pre-existing codes — CodeWhisperer helps developers avoid tedious and time-consuming coding jobs, eventually expediting the building of APIs. ChatGPT The most popular AI content generation tool that helps in content moderation as well. ChatGPT intriguingly writes amazing codes. The only know-how you need while using ChatGPT to make optimum utilization is the art of writing prompts. CodeGeeX This is your AI-based assistant that completes your coding tasks before you can imagine. Powered with the pre-training of 20+ programming languages, trained on 850+ billion tokens on a cluster of 1,536 Ascend 910 AI Processors, with 13 billion parameters. CodeGeeX offers Multilingual code generation, Crosslingua translation, Customizable programming, and Open-source and Cross-platform task completion. GitHub Copilot One of the most popular and widely adopted AI developer tools, GitHub Copilot has been trained on billions of lines of code. It transforms natural language prompts into coding suggestions in more than 12 languages. Bugasura AI-powered bug-tracking tool that streamlines the tedious bug management process seamlessly. The ability to automatically detect bugs and provide insightful pattern detection assists Bugasura in monitoring and controlling bugs. Also, it provides detailed analysis for better bug tracking for the future. It mitigates bugs as per the severity and tags each bug found with a relevant description. It offers a single platform where you can connect, write about each bug, and discuss for future prevention. Is It Possible To Develop Codes Even if You Have Negligible Knowledge of Coding? Well, if this question had been asked two years back, the answer would have been no. However, with the emergence of flawless AI tools that have been trained with accurate and error-free data, today, anyone can write codes. The use of machine learning algorithms enables these AI tools to generate code as per the asked-for user functionalities and specifications. Does That Mean Efficient Does Will Lose Their Job? The answer is no! AI is not here to take the job of coders or developers but to make coding easier for them. The thought of AI replacing humans in totality is a far-sighted cry and it is not going to happen. Remember, AI cannot use itself. Humans will use AI. Read this Dzone article to clear up this confusion. Wrapping It Up Simply put, AI tools for programming are a boon for developers as they help them complete their coding tasks quickly and with precision. There are many AI tools for programming available, and five of the most popular ones have been mentioned here. The advent of AI tools has simplified coding, and anyone with minimum or negligible know-how can write code.
I have been in your shoes: it is very intimidating to get in front of strangers and speak about your passion: technical topics where others are stronger; opinions that are the antithesis of commonly-held beliefs; real-life solutions which you don’t believe are that unique. Or perhaps the most scary: people get bored and walk out on you. Yet, how many conference sessions have you attended or watched webinars where you thought I knew this, I know more than the speaker, or even I totally disagree, and here’s why. The speakers you enjoy listening to — the David Belvins, Holly Cummings, Trisha Gee, Josh Long, Reza Rahman, Venkat Subramaniam of the world, and many others — started simply: likely pushed, goaded, and mentored into speaking. Practice and experience — and likely multiple failures — help novice speakers into rock stars. Admittedly, I am not a regular conference speaker, having spoken only a handful of times at JavaOne, Devoxx UK, DubJug, plus some local JUGs. I do, however, review submissions for conferences and have thoughts on what may (or may not) make for a good session. My Lucky Break How did I become a submission reviewer: by speaking up. JavaOne 2012 was not a year for stellar content, at least in the sessions I attended. While it’s not reasonable to expect every session to knock your socks off, in 2012, the sessions were almost uniformly bad: repeats from previous years, no earth-shattering news from Oracle, and advanced sessions that weren’t. A former co-worker on the flight home totally agreed; both of us were very disappointed and frustrated. A purported advanced talk on Groovy is my personal bellwether of what a talk shouldn’t be: the presenter opened up his text editor and basically said So. what do you want to see? No agenda. No topics. No goals. No preparation. Just a blank editor (no IDE) in which to write code...and when he missed multiple syntax errors in his initial Hello World, I walked out. After reflecting on my experiences, I reached out to Stephen Chin — then an Oracle Technology Evangelist for Java and heavily involved with JavaOne — to offer (hopefully) constructive criticisms: identifying four particularly-bad sessions and identifying ways sessions could have been improved (salvaged) — Stephen’s response: inviting me to participate in the JavaOne 2013 review process. I no longer review submissions for Oracle but currently review for Devoxx UK, which I thoroughly enjoy. Identifying Potential Topics With technology conferences, almost anything is a potential subject. Everyone’s backgrounds and experiences are different, and everyone has their story to share. The constantly-changing landscape leads to a plethora of ideas on ways to use and incorporate technology, and this diversity encourages us to want more: every day, you (hopefully) learn something new. It’s possible that you’re not even aware of what you’ve achieved: diving deep into Kafka to improve your organization’s analytics; introducing Neo4J to represent relationship graphs better than in a relational database; designing a comprehensive infrastructure-as-code approach for cloud deployment; using observability tools to better understand production problems. What you offer is the knowledge that others take home to improve their work. Ideas that appeared unrealistic now seem possible. It’s more anonymous than talking with peers and friends but just as valuable. You’d be wrong to believe that technical conferences only want in-depth technical sessions. Admittedly technology deep-dives get the buzz and excitement, but it’s not exclusive: UI/UX, imposter syndrome, careers in technology, and mental health are topics presented in recent years — different focus, but interesting and useful. When I review, I look for talks with real-life experiences, sharing problems — both expected and unexpected — and seeing possible solutions. Elle Waters' Devoxx UK 2018 talk Accessibility for UX: Don’t Worry, It’s Much Worse Than You Think started with her story of proudly showing her father an application intended to assist the elderly in managing their medications which he — the target audience — found extremely hard to use. Fascinating talk with an engaging speaker, and it really opened up my eyes. Totally blown away; probably the top session I attended that year. You might not have something as life-changing to share, but you do have something to share. A particular passion, technical or otherwise? A work success you’re particularly proud of? Your personal journey from music composition to software engineering? How about a one-line commit — based on months of research — that improved overall performance by 50% (true story IKYN)? Technology has an infinite number of facets and therefore an infinite number of stories to tell. So, what story can you share with others? Writing up Your First Submission Besides the obvious (e.g., you won’t be asked to talk until you actually submit), the submission shows both structure and goals of whatever you want to talk about: it’s not enough to state, Let’s talk about the impact of microservices on data quality if you can’t explain why that’s important. [And IMO it’s also not enough to say I’m a Java Rock Star; trust me. JavaOne had multiple submissions chosen strictly from past reputation which ultimately failed.] To help understand what a typical submission looks like, I’ll use my Devoxx Morocco submission to explain the different sections. All Devoxx conferences use the same app (and a great app at that!); other conference will ask for similar but not necessarily identical information, but hopefully, this gives you the basic concept. Title: Intriguing or interesting enough to attract the reviewer’s attention and get her/him to continue reading. Tags: After Track (#4) helps to further categorize the submission, e.g., AOT, IOT, Cloud, Microservices, Java, Scaling, Garbage Collection, whatever. Description: What attendees read to decide the sessions to attend, your main (only?) opportunity to grab their interest and, hopefully, get them to attend. Key point: what do attendees walk away with? Track: Top-level grouping, Devoxx Morocco subdivides their sessions into Architecture, Security, Data and AI, Devops & Cloud, Development Practices, People and Culture, Programming Languages, and Ui & UX sessions. Session Type: IMO, session types are more about the length than the actual type of talk, based on your available content or comfort level; new presenters often want a shorter slot. Elevator Pitch: Your sales pitch to reviewers, a quick attention-grab to get them to spend time digging deeper into your submission (reviewing slides or watching videos takes time). Notes: Notes are the most important tool in allowing reviewers to better understand a submission’s purpose, goals, topics, and organization that the submitter hopes to achieve. Slides link: Slides, blog posts, GitHub repos, whatever provides backing information; you may create prototype slides for a new talk or use material from an internal work presentation to better show what you intend to talk about. Video Link: Usually the most challenging for new(-ish) presenters. Devoxx UK asked me to record a trial presentation for my first submission, which I did with work peers. In the future, you’ll have recordings from other conferences, which is helpful even if the talk is totally new. My Red Flags Previous experiences help to identify submissions that require a dose of skepticism. This doesn’t guarantee immediate rejection, but does require more effort when reviewing: who is the submitter, what is her/his background, has s/he posted on this topic, are there other submissions that are stronger, does the topic/subject stand on its own? Everything: The Let me tell you everything about X submissions are usually either too general or unfocused (or both), and similar posts are often available online. Live Coding: Do you attend conferences for group Pair Programming sessions as a result of the presenter not finding their syntax/logic errors? I don’t. I’ve witnessed too many fiascos and don’t trust them (aside from Tricia Gee and Simon Maple, who proved themselves to be masters). Multiples I: Multiple submissions from single submitter of identical content, either in multiple tracks or of different session types. It may be that the submitter is unsure of her/his content, which may be resolved by working with the submitter, or that the submitter is fishing for an acceptance. Multiples II: A large number of submissions from a vendor attempting to raise their technology’s visibility, usually hoping that something resonates with the reviewers. Requires effort to sort through the different submissions to find something appropriate for the conference. Numbers: often of the 50 x in 50 minutes form: kitschy, buzzwordy, general interest, and rushed, rarely leaving time for Q&A. Vendors: Contentious among reviewers: is it a vendor explaining best practices for solving common problems or a blatant product push? I prefer submissions from those who use the technology as a client of the vendor rather than the vendor itself, but not always possible. Weird/Inappropriate: Topics or subjects that divide people are not appropriate for conferences, such as a submission (roughly) entitled Introducing Religion Into Secular Software Engineering. Universally down-voted. And If You're Not Ready? Other options exist if presenting at big-time conferences is too big a leap, and you want to start small, such as presenting at work or local user groups. These groups are often smaller, and you may feel more comfortable among acquaintances. Another possibility is conference labs, where you can help others come up to speed more quickly on a specific technology, protocol, or approach. Again, many possibilities exist, from authenticating using OIDC to making Pepper the Robot walk and talk. Labs tend to require more preparation, which may explain why not many are submitted (especially in recent years). Closing So, how soon are you going to submit your talk? Take the leap, It’s personally rewarding and professionally beneficial, and you may even surprise yourself.
In my previous post, I wrote about finding your competitive advantage as a software developer in a world of encroaching AI. I believe there are a few questions more relevant in the coming decade, so I like to elaborate on the topic in this and my next postings. You can only maintain such a competitive advantage if you focus on tasks that humans by their very nature can do better than machines. There are two necessary properties of software development that illustrate and coincide with the relative strengths and weaknesses of humans versus computers They are efficiency and effectiveness, and will be the focus of today’s post. I give credit to Uwe Friedrichsen for pointing out this distinction in a recent blog. Chess and Submarines Who would be among the most esteemed persons alive, in science, art, and sports? A poll taken in 1985 might include physicist Richard Feynman, actor Meryl Streep, philosopher Susan Sontag, and probably also Gary Kasparov, the young Russian chess grandmaster and new world champion. Several years before, you could already practice chess against a variety of digital opponents. The algorithms in these toy devices must seem unsophisticated now, and their feeble computational horsepower laughable. But an early AI they certainly were, even when they were no match for serious human players, least of all a grandmaster. Moore’s Law quickly took care of that. In little over a decade (1997) the same world champion lost against IBM’s Deep Blue team. This 25-year-old defeat of man against machine did not make us unduly worried that AI would soon take over in some Terminator-like dystopia. If anything, it confirmed that chess is hard for humans and easy for computers. “The question of whether a computer can think is no more interesting than the question of whether a submarine can swim," according to Professor Dijkstra. True, you cannot compare a computer winning at chess with the way Magnus Carlson does it. The way a nuclear submarine displaces water is equally incomparable to how a shark does it. Machine intelligence, whatever way you define it, is only externally analogous to what goes in a human brain. It’s the effect that counts. Yet, I disagree with the suggestion that the question of a thinking computer is uninteresting. The Journey and the Destination According to the Longman dictionary, effectiveness is the fact of producing the result that is wanted or intended; the fact of producing a successful result. Checkmate is such a successful result. Efficiency is the quality of doing something well with no waste of time or money. Of the infinite number of possible matches, fool’s mate is the most efficient one. Apropos: note the purely economic thinking in the definition. Only a “waste of time or money” is considered. Had energy been a factor, no human invention would be efficient compared to its biological counterparts in terms of raw energy consumption. Once the computer can do a job effectively as well as efficiently, humans have made themselves redundant from a cold economic perspective. You’re welcome to dabble for your own enjoyment but don’t expect a paycheck. People still enjoy chess because it was never a means of survival. We don’t need it to grow food or build houses and only a small elite of the best players make money from it. Had chess been a production resource (like land and labor), human chess players would have no competitive advantage. Being effective means arriving at a satisfactory result. We either have it, or we don’t. You can exceed expectations, or fail miserably to any degree, but it’s the binary thumbs-up or thumbs-down that counts. Efficiency is about how you perform the constituent tasks. It’s a quality that allows more leeway. Parts of the process can be less optimal than others and still contribute to an effective result. Other terms that coincide with the dichotomy are the what (and why) versus the how. It’s doing the right thing versus doing things right. It’s the destination versus the journey. Both are necessary. Being consistently inefficient will bankrupt you before long, but being ineffective won’t even get you a first sale. Therefore, no serious software project should be undertaken without a clear definition of the effectiveness we seek to achieve. Only improvisation genius Keith Jarrett could get behind a keyboard without a goal in mind and still produce a masterpiece – but that was a piano keyboard. Efficiency Is Relative, Effectiveness Subjective Effectiveness is fuzzy, unpredictable, and subjective. What do Seinfeld, Monty Python, Bohemian Rhapsody, and Star Trek have in common? They are all beloved popular classics that most people, including the critics, didn’t much notice or appreciate when they first came out. It’s no wonder many products fail, no matter how much market research you throw at it. There is no formula for creativity and no telling how people’s tastes can change. Efficiency is far less infuriating. The customer couldn’t care less what build tool or IDE the Spotify app was made with. It leaves no trace in the final product. Modern products are a complicated assemblage of parts from various suppliers. We choose parts for their efficiency in the hope they make an effective product that customers want to buy. But while each part is already effective from the supplier’s perspective when they make a sale, it only becomes efficient when it’s the right part. This extends to more than physical parts. Here's a real-world example of semi-conductor giant ASML, near my hometown. Morning traffic to the campus is hell, and public transport is only served by buses. The city council wants to lay a new bicycle lane to entice commuters living in a ten-mile radius to cycle to work. The goal is to get everybody to the office safely and fast by relieving the congestion for whom bicycles are not an option. The contractors building this road have no urgent stake in this efficiency drive, much less bicycle manufacturer Trek or Shimano, who supplies the gears and brakes to make the bikes run smoothly. But they all contribute to the effectiveness of the new road. Efficiency is relative, and effectiveness subjective. You get the point. Software is no different. The average enterprise product consists mostly of other people’s code you and your team can’t control (99.9% is a safe bet, certainly if you count the cloud stack you deploy to). Any component can be efficient in some places and useless elsewhere. A highly optimized caching mechanism backed by a dedicated Oracle enterprise is still a waste of money if you only need it to remember fifty numbers for an hour. Efficiency is about experimentation, making small tweaks, and swapping out slow/expensive components for better-performing ones. It’s a complicated, data-driven domain where computers feel right at home. Judging the effectiveness of software on the other hand is complex: it comes down to whether it ultimately makes the recipients happy. Who else but other people are qualified to answer that question and make the decisions? In the next post, I will focus on requirements/specification versus implementation and how they coincide with the efficiency/effectiveness distinction. In part three, I’ll discuss the famous alignment problem. Even humans fail at aligning software goals with their own interests and build expensive failures. How can we expect machines to do better? Then in part four, I will address our love of specialization, coding for coding’s sake, and why that will no longer be a competitive advantage soon.
Author, Researcher, Speaker, Director, DevOps Enthusiast,
VP of Engineering,
Jade Rubick Consulting LLC