This is the companion notebook to the Pathfinder app. It is meant to give some insights about the nature and shape of the data and give some cluse about the design decisions that have been taken along the way.

We basically use 4 datasets coming from the usual places: Kaggle, Huggingface, StackOverflow. The jobs, the courses, world cities geo information, and the StackOverflow 2025 survey.
https://www.kaggle.com/datasets/asaniczka/linkedin-data-engineer-job-postings
(def jobs
(load/load-dataset (jobs/job-postings-path)))(ds-info jobs)_unnamed: descriptive-stats [11 4]:
| :col-name | :datatype | :n-valid | :n-missing |
|---|---|---|---|
| :job-title | :string | 6025 | 0 |
| :company | :string | 6025 | 0 |
| :job-location | :string | 6025 | 0 |
| :job-link | :string | 6025 | 0 |
| :first-seen | :packed-local-date | 6025 | 0 |
| :search-city | :string | 6025 | 0 |
| :search-country | :string | 6025 | 0 |
| :job-level | :string | 6025 | 0 |
| :job-type | :string | 6025 | 0 |
| :job-summary | :text | 5665 | 360 |
| :job-skills | :string | 4960 | 1065 |
here is an example
(-> (tc/random jobs 5)
(tc/drop-columns [:job-summary]))_unnamed [5 10]:
| :job-title | :company | :job-location | :job-link | :first-seen | :search-city | :search-country | :job-level | :job-type | :job-skills |
|---|---|---|---|---|---|---|---|---|---|
| Senior Operations Data Analyst | Medical Mutual | Brooklyn, OH | https://www.linkedin.com/jobs/view/senior-operations-data-analyst-at-medical-mutual-3757915244 | 2023-12-17 | Cuyahoga Falls | United States | Mid senior | Onsite | SQL, SAS, PowerBI, Tableau, Microsoft Office, Data mining, Analytics, Data analysis, Data reconciliation, Data reporting, HIPAA, NCQA, Sherlock, Quality assurance, Unit test plans, Dataflow diagrams, Data visualization |
| Data Research Analyst, gt.school (Remote) - $60,000/year USD | Crossover | Cape Coral, FL | https://www.linkedin.com/jobs/view/data-research-analyst-gt-school-remote-%2460-000-year-usd-at-crossover-3783183929 | 2023-12-17 | Florida | United States | Associate | Remote | Generative AI, Machine Learning, Python, JavaScript, JSON, R, ObjectOriented Programming, Data Science, Research, Product Development, Data Analytics, Coaching, Communication, Teamwork, Project Management, Remote Work, Independent Contractor |
| Data Scientist | Sunrise Systems, Inc. | West Sacramento, CA | https://www.linkedin.com/jobs/view/data-scientist-at-sunrise-systems-inc-3782250549 | 2023-12-17 | Sacramento | United States | Associate | Onsite | |
| ANALYST I DATA STRATEGIES | Boyd Gaming | Las Vegas, NV | https://www.linkedin.com/jobs/view/analyst-i-data-strategies-at-boyd-gaming-3742058652 | 2023-12-17 | Enterprise | United States | Mid senior | Hybrid | SQL, Cognos, Microstrategy, Excel, Data Warehouses, Data Analysis, Reporting, Marketing |
| Lead Data Engineer (AWS, Azure, GCP) | CapTech | Atlanta, GA | https://www.linkedin.com/jobs/view/lead-data-engineer-aws-azure-gcp-at-captech-3751643389 | 2023-12-17 | Smyrna | United States | Mid senior | Remote | Data Engineering, Data Pipelines, Cloud Technologies, AWS, Azure, GCP, ETL, Data Orchestration, Informatica, Matillion, Talend, Snowflake, Redshift, Databricks, SQL, NoSQL, PostgreSQL, MySQL, SQL Server, Oracle, Aurora, Presto, BigQuery, Python, Java, R, C, C++, Shell, Git, Jenkins, CI/CD, Jira, DevOps, Big Data, Open Source, Data Streaming, Technical Leadership, Mentoring, Architecture, Business Needs |
The jobs contain synthetic data that doesn't always make much sense for our specific presentation:
(-> (load/load-dataset (jobs/job-postings-path) :column-whitelist ["job_location" "search_city" "search_country"])
(tc/rename-columns {:job-location :location})
(tc/drop-missing [:location])
(tc/group-by [:location])
(tc/aggregate {:count tc/row-count})
(tc/order-by :count :desc))_unnamed [1296 2]:
| :location | :count |
|---|---|
| United States | 204 |
| New York, NY | 137 |
| Chicago, IL | 113 |
| London, England, United Kingdom | 111 |
| Toronto, Ontario, Canada | 94 |
| Atlanta, GA | 87 |
| San Francisco, CA | 78 |
| Phoenix, AZ | 70 |
| Los Angeles, CA | 66 |
| Boston, MA | 64 |
| ... | ... |
| Hawthorn East, Victoria, Australia | 1 |
| Delhi, NY | 1 |
| Kettering, England, United Kingdom | 1 |
| Secaucus, NJ | 1 |
| Warton, England, United Kingdom | 1 |
| Fairfield, OH | 1 |
| Hamilton, Ontario, Canada | 1 |
| Australian Capital Territory, Australia | 1 |
| Russell, Australian Capital Territory, Australia | 1 |
| Revelstoke, British Columbia, Canada | 1 |
| Haldimand County, Ontario, Canada | 1 |
We'll take care of that, augmenting this dataset with European cities and geo locations, below.
(def courses
(load/load-dataset (courses/courses-path)))(ds-info courses)_unnamed: descriptive-stats [17 4]:
| :col-name | :datatype | :n-valid | :n-missing |
|---|---|---|---|
| :course-title | :string | 9592 | 0 |
| :rating | :string | 8154 | 1438 |
| :level | :string | 8327 | 1265 |
| :duration | :string | 9330 | 262 |
| :course-type | :string | 9592 | 0 |
| :what-you-will-learn | :string | 4982 | 4610 |
| :skill-gain | :string | 9592 | 0 |
| :modules | :string | 9592 | 0 |
| :syllabus | :text | 9591 | 1 |
| :review | :string | 8150 | 1442 |
| :schedule | :string | 8909 | 683 |
| :instructor | :string | 9592 | 0 |
| :offered-by | :string | 9592 | 0 |
| :keyword | :string | 9592 | 0 |
| :course-url | :string | 9592 | 0 |
| :column-15 | :string | 1 | 9591 |
| :column-16 | :string | 1 | 9591 |
here is an example
(tc/random courses 5)_unnamed [5 17]:
| :course-title | :rating | :level | :duration | :course-type | :what-you-will-learn | :skill-gain | :modules | :syllabus | :review | :schedule | :instructor | :offered-by | :keyword | :course-url | :column-15 | :column-16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Introduction to High-Performance and Parallel Computing | 3.2 | Beginner level | Approx. 14 hours to complete | Course | Navigate a typical Linux-based HPC environmentDescribe the components of a high-performance distributed computing systemAssess the differences between serial and parallel programmingEstimate speedup and efficiency by generating a scaling study | ['Simple Linux Utility for Resource Management (SLURM) Workload Manager', 'scripting', 'Speedup', 'computing', 'Linux'] | ['High-Performance Computing (HPC) for Non-Computer Scientists', 'Nuts and Bolts of HPC', 'Basic Parallelism', 'Evaluating Parallel Program Performance'] | [['Welcome and Meet the Instructor', 'Demo: Exploring Ames Housing Data'], ['Overview', 'Statistical Modeling: Types of Variables', 'Overview of Models', 'Explanatory versus Predictive Modeling', 'Population Parameters and Sample Statistics', 'Normal (Gaussian) Distribution', 'Standard Error of the Mean', 'Confidence Intervals', 'Statistical Hypothesis Test', 'p-Value: Effect Size and Sample Size Influence', 'Scenario', 'Performing a t Test', 'Demo: Performing a One-Sample t Test Using PROC TTEST', 'Scenario', 'Assumptions for the Two-Sample t Test', 'Testing for Equal and Unequal Variances', 'Demo: Performing a Two-Sample t Test Using PROC TTEST'], ['Overview', 'Scenario', 'Identifying Associations in ANOVA with Box Plots', 'Demo: Exploring Associations Using PROC SGPLOT', 'Identifying Associations in Linear Regression with Scatter Plots', 'Demo: Exploring Associations Using PROC SGSCATTER', 'Scenario', 'The ANOVA Hypothesis', 'Partitioning Variability in ANOVA', 'Coefficient of Determination', 'F Statistic and Critical Values', 'The ANOVA Model', 'Demo: Performing a One-Way ANOVA Using PROC GLM', 'Scenario', 'Multiple Comparison Methods', "Tukey's and Dunnett's Multiple Comparison Methods", 'Diffograms and Control Plots', 'Demo: Performing a Post Hoc Pairwise Comparison Using PROC GLM', 'Scenario', 'Using Correlation to Measure Relationships between Continuous Variables', 'Hypothesis Testing for a Correlation', 'Avoiding Common Errors When Interpreting Correlations', 'Demo: Producing Correlation Statistics and Scatter Plots Using PROC CORR', 'Scenario', 'The Simple Linear Regression Model', 'How SAS Performs Simple Linear Regression', 'Comparing the Regression Model to a Baseline Model', 'Hypothesis Testing and Assumptions for Linear Regression', 'Demo: Performing Simple Linear Regression Using PROC REG'], ['Overview', 'Scenario', 'Applying the Two-Way ANOVA Model', 'Demo: Performing a Two-Way ANOVA Using PROC GLM', 'Interactions', 'Demo: Performing a Two-Way ANOVA With an Interaction Using PROC GLM', 'Demo: Performing Post-Processing Analysis Using PROC PLM', 'Scenario', 'The Multiple Linear Regression Model', 'Hypothesis Testing for Multiple Regression', 'Multiple Linear Regression versus Simple Linear Regression', 'Adjusted R-Square', 'Demo: Fitting a Multiple Linear Regression Model Using PROC REG'], ['Overview', 'Scenario', 'Approaches to Selecting Models', 'The All-Possible Regressions Approach to Model Building', 'The Stepwise Selection Approach to Model Building', 'Interpreting p-Values and Parameter Estimates', 'Demo: Performing Stepwise Regression Using PROC GLMSELECT', 'Scenario', 'Information Criteria', "Adjusted R-Square and Mallows' Cp", 'Demo: Performing Model Selection Using PROC GLMSELECT'], ['Overview', 'Scenario', 'Assumptions for Regression', 'Verifying Assumptions Using Residual Plots', 'Demo: Examining Residual Plots Using PROC REG', 'Scenario', 'Identifying Influential Observations', 'Checking for Outliers with STUDENT Residuals', 'Checking for Influential Observations', 'Detecting Influential Observations with DFBETAS', 'Demo: Looking for Influential Observations Using PROC GLMSELECT and PROC REG', 'Demo: Examining the Influential Observations Using PROC PRINT', 'Handling Influential Observations', 'Scenario', 'Exploring Collinearity', 'Visualizing Collinearity', 'Demo: Calculating Collinearity Diagnostics Using PROC REG', 'Using an Effective Modeling Cycle'], ['Overview', 'Scenario', 'Predictive Modeling Terminology', 'Model Complexity', 'Building a Predictive Model', 'Model Assessment and Selection', 'Demo: Building a Predictive Model Using PROC GLMSELECT', 'Scenario', 'Preparing for Scoring', 'Methods of Scoring', 'Demo: Scoring Data Using PROC PLM'], ['Overview', 'Scenario', 'Associations between Categorical Variables', 'Demo: Examining the Distribution of Categorical Variables Using PROC FREQ and PROC UNIVARIATE', 'Scenario', 'The Pearson Chi-Square Test', 'Odds Ratios', 'Demo: Performing a Pearson Chi-Square Test of Association Using PROC FREQ', 'Scenario', 'The Mantel-Haenszel Chi-Square Test', 'The Spearman Correlation Statistic', 'Demo: Detecting Ordinal Associations Using PROC FREQ', 'Scenario', 'Modeling a Binary Response', 'Demo: Fitting a Binary Logistic Regression Model Using PROC LOGISTIC', 'Interpreting the Odds Ratio', 'Comparing Pairs to Assess the Fit of a Logistic Regression Model', 'Scenario', 'Specifying a Parameterization Method', 'Demo: Fitting a Multiple Logistic Regression Model with Categorical Predictors Using PROC LOGISTIC', 'Scenario', 'Interactions between Variables', 'Demo: Fitting a Multiple Logistic Regression Model with Interactions Using PROC LOGISTIC', 'Demo: Fitting a Multiple Logistic Regression Model with All Odds Ratios Using PROC LOGISTIC', 'Demo: Generating Predictions Using PROC PLM']] | 87 reviews | Flexible schedule | ['Thomas Hauser ', 'Shelley Knuth '] | ['University of Colorado Boulder'] | DataScience | https://www.coursera.org/learn/introduction-high-performance-computing | ||
| Teaching Writing Process | 4.3 | Beginner level | 19 hours (approximately) | Course | What the writing process is and how it can help improve student writing.How writing as discovery, low-stakes writing and reflection can help students grow more comfortable and confident as writers. | [] | ['Module 1: Inviting Writing', 'Module 2: What Kind of Teacher Do You Want to Be?', 'Module 3: Writing Process', 'Module 4: Writing and Reflection'] | [['Meet the Professor', 'Welcome to the Course', 'Discussion Forum Philosophy'], ['Macro Measures', 'GDP Components', 'How do we Calculate GDP?', 'Shortcomings in the Measurement of GDP', 'CPI Inflation', 'Measurement of the CPI', 'Shortcomings of the CPI', 'Unemployment Rate', 'Monetary cost of Unemployment', 'Types of Unemployment ', 'Calculations', 'Problem Set Solution - National Income', 'Problem Set Solution - GDP Calculation', 'Problem Set Solution - Cost of Living', 'Problem Set Solution - Grandfather Problem', 'Problem Set Solution - Labor Problem'], ['Economic Growth', 'Growth Formula', 'Consumption and Investment', 'Convergence', 'Savings Rate', 'Problem Set Solution - Solow Growth Model', 'Problem Set Solution - Changes in Steady State'], ['Labor Supply and Demand', 'Aggregate Labor Supply and Demand', 'Unemployment: Search Theory', 'An Increase in Unemployment Benefits', 'Problem Set Solution - How Many Workers to Hire?', 'Problem Set Solution - Labor Supply and Demand', 'Problem Set Solution - Search and Matching Model'], ['Savings and Consumption', 'Budget Constraints', 'An Increase in Interest Rates', 'PSS - Savings and Consumption Model Set Up', 'PSS - Saving and Consumption with a Change in Income', 'CSS - Savings and Consumption with a Change in Interest Rates'], ['Savings and Investment', 'Savings and Investment: Closed Economy', 'J-Bones House of Ribs', 'Open Economy', 'Large Open Economies', 'Problem Set Solution - Loanable Funds: Closed Economy', 'Problem Set Solution - How Many Pizza Ovens', 'Problem Set Solution - Quantity of Loanable Funds'], ['Money and Monetary Policy', 'Federal Reserve', 'Money Market', 'Phillips Curve', 'Open Economy Exchange Rates', 'Purchasing Power Parity Theory', 'Problem Set Solution - Money Market', 'Problem Set Solution - Money Supply Accounting', 'Problem Set Solution - Phillips Curve', 'Problem Set Solution - Exchange Rates'], ['Aggregate Supply and Demand', 'SRAS: Upward Sloping', 'Problem Set Solution - Aggregate Supply and Demand', 'Problem Set Solution - Interest Rate Effect', 'Problem Set Solution - Exchange Rate Effect', 'Problem Set Solution - Recovery from Recession'], ['Fiscal Policy', 'Expansionary Fiscal Policy', 'Corporate Tax Cut: Long Run', 'Problem Set Solution - Government Stimulus Spending', 'Problem Set Solution - Multipliers', 'Problem Set Solution - Corporate Tax Cuts', 'Thinking Like an Economist', 'Congratulations, You Fabulous and Determined Person, You!']] | 19 reviews | Flexible schedule | ['Mark Farrington'] | ['Johns Hopkins University'] | Social Sciences | https://www.coursera.org/learn/teaching-writing-process | ||
| Camera Control | 4.8 | 13 hours (approximately) | Course | [] | ['WELCOME, OVERVIEW, and FUNDAMENTALS', 'Elements of Camera Control 2.0: The Lens', ' Elements of Camera Control 3.0: Depth of Field', 'Picture Decisions:'] | [['MEET MSU and THE SPECIALIZATION', 'MEET THE PROFESSORS: Peter Glendinning and Mark Sullivan', 'MEET THE COURSE: an overview by Peter and Mark', 'Under Exposure and Over Eposure', 'Reflected Light Meter & Meter Modes', 'Equivalent Exposure Combinations & MAPS-prob', 'Stop Action and Blur'], ['Focal Length:"Normal," sensors, and angle of view', 'Focal Length: Perspective effects', 'Peter discusses Focal Length Pictures', 'Focal Length Series from a Single Vantage Point', 'Focal Lengths: Fixed or Zoom', 'Special Lenses: Macro', 'Special lenses: Fisheye', 'Special Lenses: Tilt-Shift', 'Smartphone Specialties', 'Protecting the Lens: shades and filters', 'Polarizing and Specialty Filters', 'Lens Adapters'], ['Successful use of Depth of Field', 'Depth of Field and Aperture, Focal Length, & Focal Distance', 'Mark discusses DOF in a photograph'], ['Photographs and Time as Fact', 'Photographs and Time As Fiction-', 'Peter discusses Time and his photography']] | 1,785 reviews | Flexible schedule | ['Mark Valentine Sullivan', 'Peter Glendinning'] | ['Michigan State University'] | Arts and Humanities | https://www.coursera.org/learn/camera-control | ||||
| A Public Health Approach to Hearing Loss and Aging | 4.6 | Beginner level | Approx. 2 hours to complete | Course | [] | ['Background', 'Hearing and Outcomes', 'Application and Translation'] | [['Introduction', 'Types of Questions', 'Measurement Error: Bias and Variance', 'Standardized Interviewing', 'Conversational Interviewing', 'Concept Specification'], ['Response Process: Comprehension', 'Response Process: Retrieval', 'Response Process: Judgment', 'Response Process: Response'], ['Facts and Quasi Facts', 'Memory and Recall: Reporting Behavioral Frequencies', 'Memory and Recall: Length of Reference Period', 'Memory and Recall: Comprehension and Retrieval', 'Asking Sensitive Questions', 'Asking Sensitive Questions: Techniques', 'Asking Sensitive Questions: Indirect Techniques', 'Mode, Privacy, and Confidentiality'], ['Attitude Questions: Attitudes', 'Attitude Questions: Context Effects', 'Attitude Questions: Specific vs. General Evaluations', 'Attitude Questions; Agree Disagree Scales', "Attitude Questions: Don't Know", 'Attitude Questions: Order Effects', 'All Questions: Response Options and Scales'], ['Pretesting Techniques: Expert Reviews and Focus Groups', 'Pretesting Techniques: Cognitive Interviews', 'Behavior Coding', 'Pretesting Techniques: Quantitative Techniques', 'Pretesting Techniques - Other Techniques'], ['From Start to Finish: Putting Questions into a Questionnaire', 'Motivated Underreporting: Reports from Selected Research Studies', 'Main Questionnaire: Demographic Questions - Ending', 'Mode Choice: Implications for Layout', 'Self-Administered Questionnaires: Additional Requirements', 'Summary: Unit by Unit Take-Home Points']] | 12 reviews | Flexible schedule | ['Frank R. Lin, MD, PhD', 'Jennifer A. Deal, PhD', 'Nicholas S. Reed, AuD'] | ['Johns Hopkins University'] | Health | https://www.coursera.org/learn/a-public-health-approach-to-hearing-loss-and-aging | |||
| Overcoming Challenges in Self and Society | Beginner level | 18 hours (approximately) | Course | [] | ['Understanding Adversity: An Exploration of Challenges', 'Resilience Theory and Practice: From Hardship to Strength', 'Spiritual and Humanistic Dimensions of Resilience: A Renaissance Perspective', 'The Renaissance of Resilience: You, Your Community, and Social Transformation', 'Personal Renaissance of Resilience Mandala'] | [['Welcome!', 'Twitter App: Setting up the User Interface', 'Twitter App: Connecting the U/I', 'Twitter App: Styling the U/I via ".layer"', 'Twitter App: Social.Framework and building a UIAlertController', 'Twitter App: Closing a window with UIAlertAction', 'Twitter App: Checking for "Single Sign On"', 'A general pattern for pop-up alerts', 'Twitter App: Tweet with SLComposeViewController', 'Twitter App: Reviewing what we accomplished', 'Facebook: Adding an additional UIAlertAction', 'Facebook: Using SLComposeViewController to Post', 'Future Proofing with the UIActivityViewController', 'Simplifying the Interface - Less Clicks!', 'Peer-Review 01: Your turn!'], ['Overview of Instagram App', 'Building the project with Cocoapods', 'Intro to UIImageView', 'Laying out the Interface', 'OAuth 2.0', 'Accessing a web service API', 'JSON', 'Custom URL Schemes', 'NSAppTransport in iOS 9', 'Network Security Considerations', 'Getting data with NSURLSession', 'Calling and Parsing API JSON data'], ['App Lifecycle', 'Push notifications: local Part 1', 'Push notifications: local Part 2', 'Push notifications: actions', 'Push notifications: remote Part 01', 'Push notifications: remote Part 02', 'Push notifications: remote Part 03', 'Push notifications: remote Part 04', 'Push notifications: remote Part 05', 'Push notifications: remote Part 06', 'Intro to Peer Review Assignment 03'], ['Core Data: Introduction', 'Core Data: Setting Up Your Project', 'Core Data: Building the Model', 'Core Data: Wiring the UI to CoreData', 'Enrichment: The Full Core Data Example 1', 'Enrichment: The Full Core Data Example 2', 'Peer Review 04 Instructions: Storing Data App', 'Deploying to the App Store', 'App Store Analytics']] | Flexible schedule | ['Roger L Martinez'] | ['University of Colorado System'] | Personal Development | https://www.coursera.org/learn/overcoming-challenges-in-self-and-society |
They will "complete" the job offers and let us map between different naming conventions https://simplemaps.com/data/world-cities
(def cities
(load/load-dataset (cities/worldcities-path)))(ds-info cities)_unnamed: descriptive-stats [11 4]:
| :col-name | :datatype | :n-valid | :n-missing |
|---|---|---|---|
| :city | :string | 50250 | 0 |
| :city-ascii | :string | 50248 | 2 |
| :lat | :float64 | 50250 | 0 |
| :lng | :float64 | 50250 | 0 |
| :country | :string | 50250 | 0 |
| :iso-2 | :string | 50214 | 36 |
| :iso-3 | :string | 50250 | 0 |
| :admin-name | :string | 50072 | 178 |
| :capital | :string | 16191 | 34059 |
| :population | :float64 | 49826 | 424 |
| :id | :int32 | 50250 | 0 |
here's an example
(tc/random cities 10)_unnamed [10 11]:
| :city | :city-ascii | :lat | :lng | :country | :iso-2 | :iso-3 | :admin-name | :capital | :population | :id |
|---|---|---|---|---|---|---|---|---|---|---|
| Nagdha Simla | Nagdha Simla | 24.6143 | 89.9166 | Bangladesh | BD | BGD | Dhaka | 31436.0 | 1050208700 | |
| Cologno al Serio | Cologno al Serio | 45.5833 | 9.7000 | Italy | IT | ITA | Lombardy | 11066.0 | 1380174378 | |
| Starorybnoye | Starorybnoye | 72.7667 | 104.8000 | Russia | RU | RUS | Krasnoyarskiy Kray | 10.0 | 1643724242 | |
| Punganūru | Punganuru | 13.3649 | 78.5714 | India | IN | IND | Andhra Pradesh | 54746.0 | 1356796945 | |
| Thondiamannu | Thondiamannu | 9.2639 | 76.8833 | India | IN | IND | Kerala | 12508.0 | 1356161131 | |
| Weymouth | Weymouth | 42.1981 | -70.9466 | United States | US | USA | Massachusetts | 58505.0 | 1840132442 | |
| Bir Ghbalou | Bir Ghbalou | 36.2631 | 3.5866 | Algeria | DZ | DZA | Bouira | 11016.0 | 1012249358 | |
| West Deptford | West Deptford | 39.8431 | -75.1852 | United States | US | USA | New Jersey | 22416.0 | 1840081678 | |
| Downpatrick | Downpatrick | 54.3220 | -5.7030 | United Kingdom | GB | GBR | Newry, Mourne and Down | 11545.0 | 1826860584 | |
| Begusarai | Begusarai | 25.4200 | 86.1300 | India | IN | IND | Bihār | 252008.0 | 1356619346 |
We gather insights on the hottest technologies from StackOverflow, which famously performs a yearly survey.
(def survey
(load/load-dataset (trends/tech-survey-path) :num-rows 20))(ds-info survey)_unnamed: descriptive-stats [172 4]:
| :col-name | :datatype | :n-valid | :n-missing |
|---|---|---|---|
| :"-response-id" | :int16 | 20 | 0 |
| :main-branch | :string | 20 | 0 |
| :age | :string | 20 | 0 |
| :ed-level | :string | 20 | 0 |
| :employment | :string | 20 | 0 |
| :employment-addl | :string | 17 | 3 |
| :work-exp | :int16 | 20 | 0 |
| :learn-code-choose | :string | 20 | 0 |
| :learn-code | :string | 15 | 5 |
| :learn-code-ai | :string | 20 | 0 |
| :ai-learn-how | :string | 14 | 6 |
| :years-code | :int16 | 19 | 1 |
| :dev-type | :string | 20 | 0 |
| :org-size | :string | 14 | 6 |
| :i-cor-pm | :string | 14 | 6 |
| :remote-work | :string | 14 | 6 |
| :purchase-influence | :string | 19 | 1 |
| :tech-endorse-intro | :string | 18 | 2 |
| :tech-endorse-1 | :int16 | 19 | 1 |
| :tech-endorse-2 | :int16 | 19 | 1 |
| :tech-endorse-3 | :int16 | 19 | 1 |
| :tech-endorse-4 | :int16 | 19 | 1 |
| :tech-endorse-5 | :int16 | 19 | 1 |
| :tech-endorse-6 | :int16 | 19 | 1 |
| :tech-endorse-7 | :int16 | 19 | 1 |
| :tech-endorse-8 | :int16 | 19 | 1 |
| :tech-endorse-9 | :int16 | 19 | 1 |
| :tech-endorse-13 | :int16 | 19 | 1 |
| :tech-endorse-13-text | :string | 1 | 19 |
| :tech-oppose-1 | :int16 | 16 | 4 |
| :tech-oppose-2 | :int16 | 16 | 4 |
| :tech-oppose-3 | :int16 | 16 | 4 |
| :tech-oppose-5 | :int16 | 16 | 4 |
| :tech-oppose-7 | :int16 | 16 | 4 |
| :tech-oppose-9 | :int16 | 16 | 4 |
| :tech-oppose-11 | :int16 | 16 | 4 |
| :tech-oppose-13 | :int16 | 16 | 4 |
| :tech-oppose-16 | :int16 | 16 | 4 |
| :tech-oppose-15 | :int16 | 16 | 4 |
| :tech-oppose-15-text | :boolean | 0 | 20 |
| :industry | :string | 19 | 1 |
| :job-sat-points-1 | :int16 | 17 | 3 |
| :job-sat-points-2 | :int16 | 17 | 3 |
| :job-sat-points-3 | :int16 | 17 | 3 |
| :job-sat-points-4 | :int16 | 17 | 3 |
| :job-sat-points-5 | :int16 | 17 | 3 |
| :job-sat-points-6 | :int16 | 17 | 3 |
| :job-sat-points-7 | :int16 | 17 | 3 |
| :job-sat-points-8 | :int16 | 17 | 3 |
| :job-sat-points-9 | :int16 | 17 | 3 |
| :job-sat-points-10 | :int16 | 17 | 3 |
| :job-sat-points-11 | :int16 | 17 | 3 |
| :job-sat-points-13 | :int16 | 17 | 3 |
| :job-sat-points-14 | :int16 | 17 | 3 |
| :job-sat-points-15 | :int16 | 17 | 3 |
| :job-sat-points-16 | :int16 | 17 | 3 |
| :job-sat-points-15-text | :boolean | 0 | 20 |
| :ai-threat | :string | 19 | 1 |
| :new-role | :string | 19 | 1 |
| :tool-count-work | :int16 | 13 | 7 |
| :tool-count-personal | :int16 | 14 | 6 |
| :country | :string | 20 | 0 |
| :currency | :string | 20 | 0 |
| :comp-total | :int32 | 14 | 6 |
| :language-choice | :string | 17 | 3 |
| :language-have-worked-with | :string | 16 | 4 |
| :language-want-to-work-with | :string | 16 | 4 |
| :language-admired | :string | 16 | 4 |
| :languages-have-entry | :string | 2 | 18 |
| :languages-want-entry | :string | 2 | 18 |
| :database-choice | :string | 19 | 1 |
| :database-have-worked-with | :string | 12 | 8 |
| :database-want-to-work-with | :string | 11 | 9 |
| :database-admired | :string | 11 | 9 |
| :database-have-entry | :int16 | 1 | 19 |
| :database-want-entry | :int16 | 1 | 19 |
| :platform-choice | :string | 18 | 2 |
| :platform-have-worked-with | :string | 13 | 7 |
| :platform-want-to-work-with | :string | 11 | 9 |
| :platform-admired | :string | 11 | 9 |
| :platform-have-entry | :int16 | 1 | 19 |
| :platform-want-entry | :int16 | 1 | 19 |
| :webframe-choice | :string | 17 | 3 |
| :webframe-have-worked-with | :string | 13 | 7 |
| :webframe-want-to-work-with | :string | 12 | 8 |
| :webframe-admired | :string | 12 | 8 |
| :webframe-have-entry | :string | 2 | 18 |
| :webframe-want-entry | :string | 3 | 17 |
| :dev-envs-choice | :string | 18 | 2 |
| :dev-envs-have-worked-with | :string | 13 | 7 |
| :dev-envs-want-to-work-with | :string | 11 | 9 |
| :dev-envs-admired | :string | 10 | 10 |
| :dev-env-have-entry | :boolean | 0 | 20 |
| :dev-env-want-entry | :boolean | 0 | 20 |
| :so-tags-have-worked-with | :string | 9 | 11 |
| :so-tags-want-to-work-with | :string | 5 | 15 |
| :so-tags-admired | :string | 3 | 17 |
| :so-tags-have-entry | :string | 2 | 18 |
| :so-tags-want-entry | :string | 2 | 18 |
| :op-sys-personal-use | :string | 18 | 2 |
| :op-sys-professional-use | :string | 18 | 2 |
| :office-stack-async-have-worked-with | :string | 16 | 4 |
| :office-stack-async-want-to-work-with | :string | 14 | 6 |
| :office-stack-async-admired | :string | 14 | 6 |
| :office-stack-have-entry | :string | 2 | 18 |
| :office-stack-want-entry | :string | 2 | 18 |
| :comm-platform-have-worked-with | :string | 16 | 4 |
| :comm-platform-want-to-work-with | :string | 14 | 6 |
| :comm-platform-admired | :string | 14 | 6 |
| :comm-platform-have-entr | :string | 2 | 18 |
| :comm-platform-want-entr | :string | 2 | 18 |
| :ai-models-choice | :string | 17 | 3 |
| :ai-models-have-worked-with | :string | 10 | 10 |
| :ai-models-want-to-work-with | :string | 6 | 14 |
| :ai-models-admired | :string | 6 | 14 |
| :ai-models-have-entry | :boolean | 0 | 20 |
| :ai-models-want-entry | :boolean | 0 | 20 |
| :so-account | :string | 19 | 1 |
| :so-visit-freq | :string | 19 | 1 |
| :so-duration | :string | 19 | 1 |
| :so-part-freq | :string | 18 | 2 |
| :so-dev-content | :string | 15 | 5 |
| :so-actions-1 | :int16 | 13 | 7 |
| :so-actions-16 | :boolean | 0 | 20 |
| :so-actions-3 | :int16 | 13 | 7 |
| :so-actions-4 | :int16 | 13 | 7 |
| :so-actions-5 | :int16 | 13 | 7 |
| :so-actions-6 | :int16 | 13 | 7 |
| :so-actions-9 | :int16 | 13 | 7 |
| :so-actions-7 | :int16 | 13 | 7 |
| :so-actions-10 | :int16 | 13 | 7 |
| :so-actions-15 | :int16 | 13 | 7 |
| :so-actions-15-text | :string | 1 | 19 |
| :so-comm | :string | 17 | 3 |
| :so-friction | :string | 17 | 3 |
| :ai-select | :string | 19 | 1 |
| :ai-sent | :string | 19 | 1 |
| :ai-acc | :string | 19 | 1 |
| :ai-complex | :string | 19 | 1 |
| :ai-tool-currently-partially-ai | :string | 12 | 8 |
| :ai-tool-don't-plan-to-use-ai-for-this-task | :string | 11 | 9 |
| :ai-tool-plan-to-partially-use-ai | :string | 11 | 9 |
| :ai-tool-plan-to-mostly-use-ai | :string | 7 | 13 |
| :ai-tool-currently-mostly-ai | :string | 8 | 12 |
| :ai-frustration | :string | 17 | 3 |
| :ai-explain | :string | 13 | 7 |
| :ai-agents | :string | 18 | 2 |
| :ai-agent-change | :string | 18 | 2 |
| :ai-agent-uses | :string | 8 | 12 |
| :agent-uses-general | :string | 3 | 17 |
| :ai-agent-impact-somewhat-agree | :string | 6 | 14 |
| :ai-agent-impact-neutral | :string | 5 | 15 |
| :ai-agent-impact-somewhat-disagree | :string | 3 | 17 |
| :ai-agent-impact-strongly-agree | :string | 3 | 17 |
| :ai-agent-impact-strongly-disagree | :boolean | 0 | 20 |
| :ai-agent-challenges-neutral | :string | 14 | 6 |
| :ai-agent-challenges-somewhat-disagree | :string | 5 | 15 |
| :ai-agent-challenges-strongly-agree | :string | 16 | 4 |
| :ai-agent-challenges-somewhat-agree | :string | 14 | 6 |
| :ai-agent-challenges-strongly-disagree | :string | 6 | 14 |
| :ai-agent-knowledge | :string | 2 | 18 |
| :ai-agent-know-write | :boolean | 0 | 20 |
| :ai-agent-orchestration | :string | 2 | 18 |
| :ai-agent-orch-write | :string | 1 | 19 |
| :ai-agent-observe-secure | :string | 2 | 18 |
| :ai-agent-obs-write | :boolean | 0 | 20 |
| :ai-agent-external | :string | 7 | 13 |
| :ai-agent-ext-write | :boolean | 0 | 20 |
| :ai-human | :string | 18 | 2 |
| :ai-open | :string | 12 | 8 |
| :converted-comp-yearly | :int32 | 14 | 6 |
| :job-sat | :int16 | 18 | 2 |
here's an example
(tc/random survey 5)_unnamed [5 172]:
| :"-response-id" | :main-branch | :age | :ed-level | :employment | :employment-addl | :work-exp | :learn-code-choose | :learn-code | :learn-code-ai | :ai-learn-how | :years-code | :dev-type | :org-size | :i-cor-pm | :remote-work | :purchase-influence | :tech-endorse-intro | :tech-endorse-1 | :tech-endorse-2 | :tech-endorse-3 | :tech-endorse-4 | :tech-endorse-5 | :tech-endorse-6 | :tech-endorse-7 | :tech-endorse-8 | :tech-endorse-9 | :tech-endorse-13 | :tech-endorse-13-text | :tech-oppose-1 | :tech-oppose-2 | :tech-oppose-3 | :tech-oppose-5 | :tech-oppose-7 | :tech-oppose-9 | :tech-oppose-11 | :tech-oppose-13 | :tech-oppose-16 | :tech-oppose-15 | :tech-oppose-15-text | :industry | :job-sat-points-1 | :job-sat-points-2 | :job-sat-points-3 | :job-sat-points-4 | :job-sat-points-5 | :job-sat-points-6 | :job-sat-points-7 | :job-sat-points-8 | :job-sat-points-9 | :job-sat-points-10 | :job-sat-points-11 | :job-sat-points-13 | :job-sat-points-14 | :job-sat-points-15 | :job-sat-points-16 | :job-sat-points-15-text | :ai-threat | :new-role | :tool-count-work | :tool-count-personal | :country | :currency | :comp-total | :language-choice | :language-have-worked-with | :language-want-to-work-with | :language-admired | :languages-have-entry | :languages-want-entry | :database-choice | :database-have-worked-with | :database-want-to-work-with | :database-admired | :database-have-entry | :database-want-entry | :platform-choice | :platform-have-worked-with | :platform-want-to-work-with | :platform-admired | :platform-have-entry | :platform-want-entry | :webframe-choice | :webframe-have-worked-with | :webframe-want-to-work-with | :webframe-admired | :webframe-have-entry | :webframe-want-entry | :dev-envs-choice | :dev-envs-have-worked-with | :dev-envs-want-to-work-with | :dev-envs-admired | :dev-env-have-entry | :dev-env-want-entry | :so-tags-have-worked-with | :so-tags-want-to-work-with | :so-tags-admired | :so-tags-have-entry | :so-tags-want-entry | :op-sys-personal-use | :op-sys-professional-use | :office-stack-async-have-worked-with | :office-stack-async-want-to-work-with | :office-stack-async-admired | :office-stack-have-entry | :office-stack-want-entry | :comm-platform-have-worked-with | :comm-platform-want-to-work-with | :comm-platform-admired | :comm-platform-have-entr | :comm-platform-want-entr | :ai-models-choice | :ai-models-have-worked-with | :ai-models-want-to-work-with | :ai-models-admired | :ai-models-have-entry | :ai-models-want-entry | :so-account | :so-visit-freq | :so-duration | :so-part-freq | :so-dev-content | :so-actions-1 | :so-actions-16 | :so-actions-3 | :so-actions-4 | :so-actions-5 | :so-actions-6 | :so-actions-9 | :so-actions-7 | :so-actions-10 | :so-actions-15 | :so-actions-15-text | :so-comm | :so-friction | :ai-select | :ai-sent | :ai-acc | :ai-complex | :ai-tool-currently-partially-ai | :ai-tool-don't-plan-to-use-ai-for-this-task | :ai-tool-plan-to-partially-use-ai | :ai-tool-plan-to-mostly-use-ai | :ai-tool-currently-mostly-ai | :ai-frustration | :ai-explain | :ai-agents | :ai-agent-change | :ai-agent-uses | :agent-uses-general | :ai-agent-impact-somewhat-agree | :ai-agent-impact-neutral | :ai-agent-impact-somewhat-disagree | :ai-agent-impact-strongly-agree | :ai-agent-impact-strongly-disagree | :ai-agent-challenges-neutral | :ai-agent-challenges-somewhat-disagree | :ai-agent-challenges-strongly-agree | :ai-agent-challenges-somewhat-agree | :ai-agent-challenges-strongly-disagree | :ai-agent-knowledge | :ai-agent-know-write | :ai-agent-orchestration | :ai-agent-orch-write | :ai-agent-observe-secure | :ai-agent-obs-write | :ai-agent-external | :ai-agent-ext-write | :ai-human | :ai-open | :converted-comp-yearly | :job-sat |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | I am a developer by profession | 25-34 years old | Associate degree (A.A., A.S., etc.) | Employed | 2 | Yes, I am not new to coding but am learning new coding techniques or programming language | Online Courses or Certification (includes all media types);Other online resources (e.g. standard search, forum, online community);Books / Physical media;Videos (not associated with specific online course or certification);Stack Overflow or Stack Exchange | Yes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbies | AI CodeGen tools or AI-enabled apps | 10 | Developer, back-end | 500 to 999 employees | Individual contributor | Hybrid (some in-person, leans heavy to flexibility) | No | Personal Project | 13 | 1 | 2 | 9 | 4 | 3 | 12 | 5 | 7 | 14 | 14 | 1 | 13 | 10 | 9 | 3 | 4 | 2 | 5 | 15 | Retail and Consumer Services | 10 | 8 | 3 | 9 | 12 | 1 | 6 | 2 | 11 | 4 | 7 | 13 | 14 | 15 | 5 | I'm not sure | I have transitioned into a new career and/or industry voluntarily | 6 | 5 | Netherlands | EUR European Euro | 90000 | Yes | Java | Java;Python;Swift | Java | Yes | Dynamodb;MongoDB | Dynamodb;MongoDB | Dynamodb;MongoDB | Yes | Amazon Web Services (AWS);Datadog;Docker;Homebrew;Kubernetes;Maven (build tool);Terraform | Amazon Web Services (AWS);Datadog;Docker;Homebrew;Kubernetes;Maven (build tool);Terraform | Amazon Web Services (AWS);Datadog;Docker;Homebrew;Kubernetes;Maven (build tool);Terraform | Yes | Spring Boot | Spring Boot | Spring Boot | Yes | IntelliJ IDEA;PyCharm;Visual Studio Code;Xcode | IntelliJ IDEA;PyCharm;Visual Studio Code;Xcode | IntelliJ IDEA;PyCharm;Visual Studio Code;Xcode | Windows;MacOS;iOS;iPadOS | MacOS | Confluence;GitHub;Jira | Confluence;GitHub;Jira | Confluence;GitHub;Jira | Stack Overflow;Discord;Reddit;Dev.to;Hacker News;GitHub (public projects, not private repos);Slack (public channels, not work);YouTube;Twitch;LinkedIn;Substack;Medium | Stack Overflow;Discord;Reddit;Dev.to;Hacker News;GitHub (public projects, not private repos);Slack (public channels, not work);YouTube;Twitch;LinkedIn;Substack;Medium | Stack Overflow;Discord;Reddit;Dev.to;Hacker News;GitHub (public projects, not private repos);Slack (public channels, not work);YouTube;Twitch;LinkedIn;Substack;Medium | Yes | openAI GPT (chatbot models) | openAI GPT (chatbot models) | openAI GPT (chatbot models) | Not sure/can't remember | Multiple times per day | Between 10 and 15 years | Infrequently, less than once per year | Chat (people);Message Boards;Long-form articles;Videos;Coding challenges;Logic games/puzzles;Lists of recommendations (tools, frameworks, technologies, etc.);Direct messaging of users;Job board;Day-in-the-life profiles/interviews with experts | 6 | 5 | 8 | 2 | 4 | 9 | 10 | 11 | 15 | Yes, somewhat | About half of the time | Yes, I use AI tools weekly | Indifferent | Neither trust nor distrust | Bad at handling complex tasks | Learning new concepts or technologies | Learning about a codebase;Project planning;Committing and reviewing code;Deployment and monitoring | Writing code;Documenting code;Debugging or fixing code;Testing code;Predictive analytics;Search for answers;Generating content or synthetic data;Creating or maintaining documentation | AI solutions that are almost right, but not quite;Debugging AI-generated code is more time-consuming | No | No, and I don't plan to | Not at all or minimally | It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier. | I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents. | Integrating AI agents with my existing tools and workflows can be difficult.;My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platforms | When I don’t trust AI’s answers;When I want to fully understand something;When I want to learn best practices;When I want to compare different solutions;When I have ethical or security concerns about code | All skills. AI is a flop. | 104413 | 9 | ||||||||||||||||||||||||||||||||||||||||||||||
| 19 | I am a developer by profession | 35-44 years old | Associate degree (A.A., A.S., etc.) | Employed | 20 | Yes, I am not new to coding but am learning new coding techniques or programming language | Stack Overflow or Stack Exchange;Technical documentation (is generated for/by the tool or system);AI CodeGen tools or AI-enabled apps;Blogs or podcasts | No, I didn't spend time learning in the past year | 20 | Developer, back-end | 20 to 99 employees | People manager | Hybrid (some remote, leans heavy to in-person) | Yes, I influenced the purchase of a substantial addition to the tech stack | Work | 14 | 6 | 5 | 1 | 2 | 4 | 12 | 3 | 10 | 11 | Fintech | 4 | 3 | 13 | 6 | 7 | 8 | 9 | 2 | 10 | 14 | 1 | 11 | 12 | 15 | 5 | No | I have somewhat considered changing my career and/or the industry I work in | 2 | 1 | Germany | EUR European Euro | Yes | Bash/Shell (all shells);Java;JavaScript;Perl;TypeScript | Bash/Shell (all shells);Java | Bash/Shell (all shells);Java | Yes | H2;MongoDB;MySQL;PostgreSQL | MongoDB;PostgreSQL | MongoDB;PostgreSQL | Yes | Amazon Web Services (AWS);Ansible;APT;Docker;Heroku;Maven (build tool);npm | Amazon Web Services (AWS);Docker;Maven (build tool) | Amazon Web Services (AWS);Docker;Maven (build tool) | No | Yes | IntelliJ IDEA;Vim | IntelliJ IDEA;Vim | IntelliJ IDEA;Vim | Ubuntu;Debian | Ubuntu;Debian | GitHub;Google Workspace;Wikis | GitHub;Google Workspace;Wikis | GitHub;Google Workspace;Wikis | Stack Overflow;Discord;Reddit | Stack Overflow;Discord;Reddit | Stack Overflow;Discord;Reddit | Yes | DeepSeek (R- Reasoning models);DeepSeek (V- General purpose models);Meta Llama (all models);Mistral AI models | Yes | A few times per week | Between 10 and 15 years | Less than once every 2 - 3 months | Long-form articles | No, not at all | I don't use AI or AI-enabled tools | No, and I don't plan to | Very unfavorable | Highly distrust | Very poor at handling complex tasks | Learning about a codebase;Project planning;Documenting code;Debugging or fixing code;Testing code;Committing and reviewing code;Deployment and monitoring;Search for answers;Generating content or synthetic data;Creating or maintaining documentation | Writing code;Predictive analytics;Learning new concepts or technologies | Other (write in): | No | No, and I don't plan to | No, but my development work has changed somewhat due to non-AI factors | Integrating AI agents with my existing tools and workflows can be difficult.;It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier. | I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents. | My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platforms | When I don’t trust AI’s answers;When I want to fully understand something;When I want to learn best practices;When I want to compare different solutions;When I have ethical or security concerns about code;When I need help fixing complex or unfamiliar code | AI will not become more capable in 3-5 years. | 5 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 5 | I am a developer by profession | 35-44 years old | Master’s degree (M.A., M.S., M.Eng., MBA, etc.) | Independent contractor, freelancer, or self-employed | Caring for dependents (children, elderly, etc.) | 21 | No, I am not new to coding and did not learn new coding techniques or programming languages | Yes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbies | Technical documentation (is generated for/by the tool or system);Other online resources (e.g. standard search, forum, online community) | 22 | Engineering manager | Yes, I endorsed a tool that was open-source and is currently used by more than just myself but no purchase was made | Work | 6 | 3 | 1 | 9 | 10 | 8 | 7 | 4 | 2 | 14 | 7 | 13 | 3 | 9 | 12 | 6 | 1 | 8 | 14 | 15 | Software Development | 9 | 4 | 11 | 13 | 14 | 8 | 6 | 5 | 7 | 2 | 1 | 12 | 10 | 15 | 3 | No | I have neither consider or transitioned into a new career or industry | 4 | 3 | Ukraine | USD United States dollar | 60000 | Yes | C;C#;C++;Delphi;HTML/CSS;Java;JavaScript;Lua;PowerShell;Python;SQL;TypeScript;VBA;Visual Basic (.Net) | C#;Java;JavaScript;Python;SQL;TypeScript | C#;Java;JavaScript;Python;SQL;TypeScript | Yes | Elasticsearch;Microsoft SQL Server;MySQL;Oracle;PostgreSQL;Redis;SQLite | Elasticsearch;Oracle;PostgreSQL | Elasticsearch;Oracle;PostgreSQL | Yes | Amazon Web Services (AWS);APT;Docker;Make;Maven (build tool);MSBuild;npm;NuGet;Pip | Amazon Web Services (AWS);APT;Docker;Maven (build tool);MSBuild;npm;NuGet;Pip | Amazon Web Services (AWS);APT;Docker;Maven (build tool);MSBuild;npm;NuGet;Pip | Yes | Angular;ASP.NET;ASP.NET Core;Flask;jQuery | Angular;ASP.NET Core;Flask | Angular;ASP.NET Core;Flask | Yes | Eclipse;IntelliJ IDEA;Jupyter Notebook/JupyterLab;Notepad++;PyCharm;Rider;Visual Studio;WebStorm | IntelliJ IDEA;Jupyter Notebook/JupyterLab;Notepad++;PyCharm;Rider;Visual Studio;WebStorm | IntelliJ IDEA;Jupyter Notebook/JupyterLab;Notepad++;PyCharm;Rider;Visual Studio;WebStorm | Large Language Model;Google Gemini | Large Language Model | Large Language Model | Windows;iOS | Windows;Ubuntu;Debian | Azure Devops;GitHub;Jira | Azure Devops;GitHub;Jira | Azure Devops;GitHub;Jira | Stack Overflow;Stack Exchange;GitHub (public projects, not private repos) | Stack Overflow;Stack Exchange;GitHub (public projects, not private repos) | Stack Overflow;Stack Exchange;GitHub (public projects, not private repos) | Yes | openAI GPT (chatbot models) | openAI GPT (chatbot models) | openAI GPT (chatbot models) | No | A few times per month or weekly | Between 5 and 10 years | Infrequently, less than once per year | Long-form articles | 1 | 7 | 4 | 2 | 5 | 10 | 6 | 12 | 15 | No, not really | Rarely, almost never | Yes, I use AI tools weekly | Favorable | Neither trust nor distrust | Good, but not great at handling complex tasks | Learning about a codebase;Writing code;Debugging or fixing code;Search for answers;Learning new concepts or technologies | Project planning;Documenting code;Testing code;Committing and reviewing code;Deployment and monitoring;Predictive analytics;Creating or maintaining documentation | Generating content or synthetic data | AI solutions that are almost right, but not quite | partly | No, and I don't plan to | Yes, to a great extent | Integrating AI agents with my existing tools and workflows can be difficult.;My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platforms | I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents. | It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier. | When I don’t trust AI’s answers | critical thinking, the skill to define the task correctly | 60000 | 7 | ||||||||||||||||||||||||||||||||||||||||||||||
| 18 | I am a developer by profession | 25-34 years old | Master’s degree (M.A., M.S., M.Eng., MBA, etc.) | Employed | 1 | Yes, I am not new to coding but am learning new coding techniques or programming language | Online Courses or Certification (includes all media types);Books / Physical media;Videos (not associated with specific online course or certification);Stack Overflow or Stack Exchange;Technical documentation (is generated for/by the tool or system);AI CodeGen tools or AI-enabled apps;Blogs or podcasts | Yes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbies | Videos (not associated with specific online course or certification);Other online resources (e.g. standard search, forum, online community);Stack Overflow or Stack Exchange | 8 | Developer, full-stack | 100 to 499 employees | Individual contributor | Hybrid (some remote, leans heavy to in-person) | Yes, I endorsed a tool that was open-source and is currently used by more than just myself but no purchase was made | Work | 12 | 3 | 4 | 5 | 1 | 2 | 9 | 7 | 11 | 14 | 11 | 6 | 9 | 14 | 8 | 2 | 5 | 1 | 4 | 15 | Government | 1 | 3 | 12 | 9 | 11 | 10 | 2 | 13 | 5 | 8 | 4 | 14 | 7 | 15 | 6 | Yes | I have somewhat considered changing my career and/or the industry I work in | 10 | 20 | Greece | EUR European Euro | Yes | HTML/CSS;JavaScript;Python;SQL | Python | Python | Yes | MariaDB;MongoDB;MySQL;SQLite | MongoDB | MongoDB | No | Yes | Django;Flask;React | Django;React | Django;React | Yes | Vim;Visual Studio Code | Vim;Visual Studio Code | Vim;Visual Studio Code | Tailwind CSS 4 | MacOS | Ubuntu | GitHub;Google Colab;Jira | Stack Overflow;Reddit;GitHub (public projects, not private repos);YouTube;Twitch | GitHub (public projects, not private repos);Kaggle | GitHub (public projects, not private repos) | Yes | openAI GPT (chatbot models) | Yes | A few times per week | Between 5 and 10 years | Infrequently, less than once per year | Chat (people);Coding challenges;Logic games/puzzles;Direct messaging of users | 1 | 5 | 8 | 2 | 11 | 10 | 3 | 14 | 15 | No, not really | About half of the time | Yes, I use AI tools daily | Unfavorable | Neither trust nor distrust | Good, but not great at handling complex tasks | Writing code;Documenting code;Debugging or fixing code;Search for answers;Learning new concepts or technologies | Project planning;Testing code;Committing and reviewing code;Predictive analytics;Creating or maintaining documentation | Learning about a codebase;Deployment and monitoring | Generating content or synthetic data | AI solutions that are almost right, but not quite;Debugging AI-generated code is more time-consuming;I’ve become less confident in my own problem-solving | No, and I don't plan to | Yes, somewhat | Integrating AI agents with my existing tools and workflows can be difficult. | It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier. | I have concerns about the security and privacy of data when using AI agents. | I am concerned about the accuracy of the information provided by AI agents. | My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platforms | When I want to learn best practices;When I have ethical or security concerns about code;When I need quick help troubleshooting | 6 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| 4 | I am a developer by profession | 35-44 years old | Bachelor’s degree (B.A., B.S., B.Eng., etc.) | Employed | None of the above | 4 | Yes, I am not new to coding but am learning new coding techniques or programming language | Other online resources (e.g. standard search, forum, online community);Videos (not associated with specific online course or certification);Stack Overflow or Stack Exchange;Technical documentation (is generated for/by the tool or system);AI CodeGen tools or AI-enabled apps | Yes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbies | AI CodeGen tools or AI-enabled apps;Videos (not associated with specific online course or certification);Other online resources (e.g. standard search, forum, online community) | 5 | Developer, back-end | 10,000 or more employees | Individual contributor | Remote | No | Personal Project | 2 | 12 | 6 | 5 | 13 | 3 | 8 | 11 | 7 | 14 | 10 | 5 | 8 | 4 | 13 | 12 | 2 | 7 | 1 | 15 | Retail and Consumer Services | 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 3 | No | I have neither consider or transitioned into a new career or industry | Ukraine | EUR European Euro | 31200 | Yes | Java;Kotlin;SQL | Java;Kotlin | Java;Kotlin | No | Yes | Amazon Web Services (AWS);Google Cloud | Amazon Web Services (AWS);Google Cloud | Amazon Web Services (AWS);Google Cloud | Yes | Spring Boot | Spring Boot | Spring Boot | No | Amazon Bedrock | Windows | Windows;Ubuntu | GitLab;Jira;Miro | GitLab;Jira | GitLab;Jira | Stack Overflow;Reddit;YouTube;LinkedIn | Stack Overflow;Reddit;GitHub (public projects, not private repos);YouTube;LinkedIn | Stack Overflow;Reddit;YouTube;LinkedIn | No | Yes | A few times per month or weekly | Between 3 and 5 years | I have never participated in Q&A on Stack Overflow | Videos;Chat (bot/AI) | 1 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 15 | Neutral | Rarely, almost never | Yes, I use AI tools weekly | Favorable | Somewhat trust | Bad at handling complex tasks | Project planning;Documenting code;Testing code;Committing and reviewing code;Deployment and monitoring;Creating or maintaining documentation | Learning about a codebase;Writing code;Debugging or fixing code;Predictive analytics | Search for answers;Generating content or synthetic data;Learning new concepts or technologies | AI solutions that are almost right, but not quite;I don’t use AI tools regularly | NO | Yes, I use AI agents at work monthly or infrequently | Not at all or minimally | Software engineering | Language processing | AI agents have accelerated my learning about new technologies or codebases. | AI agents have increased my productivity.;AI agents have improved the quality of my code.;AI agents have helped me solve complex problems more effectively.;AI agents have reduced the time spent on specific development tasks.;AI agents have improved collaboration within my team. | AI agents have helped me automate repetitive tasks. | It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier. | I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents.;My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platforms | Integrating AI agents with my existing tools and workflows can be difficult. | ChatGPT;Claude Code | When I don’t trust AI’s answers;When I want to fully understand something;When I have ethical or security concerns about code;When I’m stuck and can’t explain the problem | 36197 | 6 |
The data will need major massaging before being useful to Pathfinder.
Some of this data may conceivably grow a bit too large to keep in memory, so we store the clean and adjusted data in DuckDB. DuckDB has been chosen for its native support of vector embeddings.
This is how the jobs table looks like
(count-table-rows "jobs")6025
(-> (jdbc/execute "select * from jobs limit 5")
tc/dataset
(tc/drop-columns [:embedding])
(tc/map-columns :description
[:description]
(fn [desc]
(if (> (count desc) 200)
(str (subs desc 0 200) " [...]")
desc))))_unnamed [5 12]:
| :description | :job-id | :job-title | :longitude | :skills | :job-link | :latitude | :job-level | :job-type | :location | :country | :company |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Overview | 6512713649585438804 | Data Engineer 2 | 2.1769 | Azure, SQL, NoSQL, SQL Server, Oracle, MongoDB, Data pipelines, Data integration tools, Objectoriented/object function scripting languages | https://www.linkedin.com/jobs/view/data-engineer-2-at-cook-medical-3526207414 | 41.3825 | Mid senior | Onsite | Barcelona | Spain | Cook Medical |
| The Data Engineer develops, implements and documents data systems that provide the technical solutions to meet specifications and business requirements defined by company objectives to promot [...] | |||||||||||
| This is for a client of Recruiting from Scratch. | 3945694417727177131 | Staff Data Engineer | 6.7767 | Python, Snowflake, Airflow, Kubernetes, Docker, Helm, Spark, pySpark, SQL, TDD, Pair Programming, Continuous Integration, automated testing, Kafka, Storm, SparkStreaming, dimensional data modeling, ETL, data management, data classification | https://www.linkedin.com/jobs/view/staff-data-engineer-at-recruiting-from-scratch-3744389892 | 51.2256 | Mid senior | Onsite | Düsseldorf | Germany | Recruiting from Scratch |
| Who is Recruiting from Scratch: | |||||||||||
| Recruiting from Scratch is a premier talent firm that focuses on placing the best product managers, software, and hardw [...] | |||||||||||
| This is for a client of Recruiting from Scratch. | 3064263555041238425 | Senior Data Engineer, Public Company | 2.3522 | Python, SQL, Snowflake, Airflow, Kubernetes, Docker, Helm, Spark, pySpark, Kafka, Storm, ETL, TDD, Pair programming, Continuous integration, Software testing, Deployment, Streamprocessing systems, Data modeling, Schema design, Data warehouses, Dimensional data modeling, Legal compliance, Data management | https://www.linkedin.com/jobs/view/senior-data-engineer-public-company-at-recruiting-from-scratch-3748828472 | 48.8567 | Mid senior | Onsite | Paris | France | Recruiting from Scratch |
| Who is Recruiting from Scratch: | |||||||||||
| Recruiting from Scratch is a premier talent firm that focuses on placing the best product managers, software, and hardw [...] | |||||||||||
| This is for a client of Recruiting from Scratch. | 406085241463565083 | Senior Data Engineer, Public Company | -0.3764 | TDD, Automation, Continuous delivery, Data engineering, Data science, Business intelligence, Python, Snowflake, Airflow, Kubernetes, Docker, Helm, Spark, PySpark, SQL, Agile engineering, Pair programming, Continuous integration, Kafka, Storm, SparkStreaming, Data warehousing, ETL, Data classification, Data retention | https://www.linkedin.com/jobs/view/senior-data-engineer-public-company-at-recruiting-from-scratch-3744392289 | 39.4700 | Mid senior | Onsite | Valencia | Spain | Recruiting from Scratch |
| Who is Recruiting from Scratch: | |||||||||||
| Recruiting from Scratch is a premier talent firm that focuses on placing the best product managers, software, and hardw [...] | |||||||||||
| Overview | 1351897729842045494 | Senior Systems Engineer, Azure Data Platform | 7.2683 | https://www.linkedin.com/jobs/view/senior-systems-engineer-azure-data-platform-at-cook-medical-3775650947 | 43.7019 | Mid senior | Hybrid | Nice | France | Cook Medical | |
| We are seeking a talented Azure Cloud and Fabric Data Platform Engineer to play a pivotal role in ensuring the availability, performance, scalability, and security of our Azure-based data env [...] |
The job offers have been relocated. That is, they have been assigned a major European city according to its population. This gives predicatble distribution across familiar places.
(-> (jdbc/execute "select location,latitude,longitude from jobs")
tc/dataset
jobs/plot-job-offers)The courses data looks like this
(count-table-rows "courses")6403
(-> (jdbc/execute "select * from courses limit 5")
tc/dataset
(tc/drop-columns [:embedding]))_unnamed [5 14]:
| :institution | :description | :schedule | :learning-product | :gained-skills | :duration | :rate | :title | :level | :instructors | :url | :reviews | :offered-by | :course-id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| The Museum of Modern Art | Flexible schedule | Course | Art History, Art, History, Creativity | 20 hours (approximately) | 4.8 | Fashion as Design | Beginner level | Anna Burckhardt, Paola Antonelli, Michelle Millar Fisher, Stephanie Kramer | https://www.coursera.org/learn/fashion-design | 2813 | ['The Museum of Modern Art'] | 4100303846790394411 | |
| University of Illinois at Urbana-Champaign | Flexible schedule | Course | Approx. 34 hours to complete | 4.4 | Modern American Poetry | Beginner level | Cary Nelson | https://www.coursera.org/learn/modern-american-poetry | 100 | ['University of Illinois at Urbana-Champaign'] | 128792217344349905 | ||
| Michigan State University | Flexible schedule | Course | 9 hours (approximately) | 4.5 | Pixel Art for Video Games | Beginner level | Andrew Dennis, Ricardo Guimaraes | https://www.coursera.org/learn/pixel-art-video-games | 227 | ['Michigan State University'] | 8032231401041982106 | ||
| SAE Institute México | Flexible schedule | Course | Approx. 8 hours to complete | Distribución digital de la música independiente | Beginner level | Eduardo de la Vara Brown. | https://www.coursera.org/learn/distribucion-digital-de-la-musica-independiente | ['SAE Institute México'] | 4684675890005070207 | ||||
| University of Rochester | Students will be able to describe the blues as an important musical form. Students will be able to explain differences in jazz and other variations of the blues. | Flexible schedule | Course | Music, Chord, Jazz, Jazz Improvisation | Approx. 11 hours to complete | 4.8 | The Blues: Understanding and Performing an American Art Form | Beginner level | Dariusz Terefenko | https://www.coursera.org/learn/the-blues | 582 | ['University of Rochester'] | 8439066051960638428 |
The technology trends is a distillation of the StackOverflow survey data. Once reduced to it's bare essentials it isn't that unwieldy any more.
(ds-info @trends/trends-ds)_unnamed: descriptive-stats [9 4]:
| :col-name | :datatype | :n-valid | :n-missing |
|---|---|---|---|
| :desirability | :float64 | 55187 | 0 |
| :prof-user-count | :int64 | 55187 | 0 |
| :want-count | :int64 | 55187 | 0 |
| :have-count | :int64 | 55187 | 0 |
| :adoption | :float64 | 55187 | 0 |
| :year | :int64 | 55187 | 0 |
| :technology | :string | 55187 | 0 |
| :median-salary | :float64 | 48680 | 6507 |
| :country | :string | 53771 | 1416 |
here is an example
(tc/random @trends/trends-ds 10)_unnamed [10 9]:
| :desirability | :prof-user-count | :want-count | :have-count | :adoption | :year | :technology | :median-salary | :country |
|---|---|---|---|---|---|---|---|---|
| 0.72000000 | 111 | 18 | 25 | 0.22522523 | 2024 | C++ | 45078.0 | Slovenia |
| 0.91329480 | 1591 | 632 | 692 | 0.43494657 | 2024 | PostgreSQL | 87231.0 | Canada |
| 0.52500000 | 451 | 42 | 80 | 0.17738359 | 2023 | ASP.NET | 34350.0 | Mexico |
| 0.57142857 | 87 | 4 | 7 | 0.08045977 | 2023 | Delphi | 54280.0 | Belarus |
| 1.00000000 | 4 | 1 | 1 | 0.25000000 | 2025 | Terraform | Angola | |
| 0.23255814 | 2178 | 10 | 43 | 0.01974288 | 2023 | Objective-C | 64254.0 | France |
| 2.00000000 | 6 | 2 | 1 | 0.16666667 | 2023 | Ninja | Malawi | |
| 1.33333333 | 138 | 12 | 9 | 0.06521739 | 2023 | Scikit-Learn | 30781.0 | Korea, South |
| 1.00000000 | 22 | 2 | 2 | 0.09090909 | 2024 | NumPy | 22800.0 | Iraq |
| 1.96250000 | 5413 | 314 | 160 | 0.02955847 | 2025 | Elixir | 175000.0 | United States |
The desirability index may require some explanation. This index tells how a technology is desired (sparks geunine user interest) compared to how often people are paid to use it:
The Growth Drivers (Ratio > 1.1): Languages like Rust, Go, or specialized AI frameworks. These represent technologies where community excitement outstrips current enterprise adoption. This has likely a high future demand and talent scarcity, which typically commands a salary premium.
The Market Anchors (Ratio 0.4 – 0.7): The baseline industry giants like JavaScript, Java, and SQL. They have massive have-count values but lower ratios. This demonstrates the "Enterprise Lock-in" concept; these are the bedrock of the job market where real-world hiring volume is guaranteed, even if the developer "hype" has moved on.
The Atrophy Zone (Ratio < 0.3): The legacy stacks or fading frameworks. If a technology has a low count, low salary, and a plunging ratio, it tells a clear story of a shrinking ecosystem where finding modern, lucrative roles will become increasingly difficult.
The StackOverflow's survey covers a whole lot of technologies across several countries. We take care of taking a picture of a localised reality as to avoid bunching together wildly different data groups.
(trends/plot-trends
(tc/select-rows @trends/trends-ds
(fn [row]
(and (= (:year row) 2025)
(> (:have-count row) 400)
(= "Germany" (:country row))))))(trends/plot-trends
(tc/select-rows @trends/trends-ds
(fn [row]
(and (= (:year row) 2025)
(> (:have-count row) 900)
(= "United States of America" (:country row))))))Which exposes the typical IT conundrum that sees fun techonology as the least in demand (by employers) and the most adopted technology among the least desirable (by developers).
Her is how the surveys distribute incomes across the globe:
(trends/plot-survey-geo-distribution
(trends/join-so-data-with-centroids
(trends/extract-country-overview (trends/tech-survey-path))))StackOverflow's data covers a large number of countries and it looks different from region to region. For this reason the indices calculated by the app are limited to the area where the user looks for job opportunities. For each skill that is recognised in the course a number of indices are calculated. Eventually those indices are compounded (averaged) for the course.
The calculated indexed are:
Odd looking boxes connected by squiggly lines
Although the data comes from disparate sources, it is all ingested in DuckDB tables for easy access.
pipeline-diagramHow the app should behave, when it behaves.
ui-diagramEOF
source: notebooks/notebook.clj